blob: 7ad35de30f8cae978035652397256a343aaf3c6f [file] [log] [blame]
package com.cforcoding.text;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author William Shields
*/
public class TextUtils {
public static boolean find(Pattern pattern, String text) {
Matcher m = pattern.matcher(text);
return m.find();
}
public static boolean matches(Pattern pattern, String text) {
Matcher m = pattern.matcher(text);
return m.matches();
}
public static void match(String pattern, String text, MatchCallback callback) {
match(Pattern.compile(pattern), text, callback);
}
public static void match(String pattern, int flags, String text, MatchCallback callback) {
match(Pattern.compile(pattern, flags), text, callback);
}
public static void match(Pattern pattern, String text, MatchCallback callback) {
Matcher m = pattern.matcher(text);
while (m.find()) {
callback.match(m.toMatchResult());
}
}
public static String replace(String pattern, String text, ReplaceCallback callback) {
return replace(Pattern.compile(pattern), text, callback);
}
public static String replace(String pattern, int flags, String text, ReplaceCallback callback) {
return replace(Pattern.compile(pattern, flags), text, callback);
}
public static String replace(Pattern pattern, String text, ReplaceCallback callback) {
Matcher m = pattern.matcher(text);
boolean result = m.find();
if (result) {
StringBuffer sb = new StringBuffer();
do {
m.appendReplacement(sb, Matcher.quoteReplacement(callback.match(m.toMatchResult())));
result = m.find();
} while (result);
m.appendTail(sb);
return sb.toString();
}
return text;
}
public static String replace(String pattern, String text, String replacement) {
return replace(Pattern.compile(pattern), text, replacement);
}
public static String replace(String pattern, int flags, String text, String replacement) {
return replace(Pattern.compile(pattern, flags), text, replacement);
}
public static String replace(Pattern pattern, String text, String replacement) {
Matcher m = pattern.matcher(text);
boolean result = m.find();
if (result) {
StringBuffer sb = new StringBuffer();
do {
m.appendReplacement(sb, replacement);
result = m.find();
} while (result);
m.appendTail(sb);
return sb.toString();
}
return text;
}
public static <T> List<T> tokenize(String pattern, String text, TokenizeCallback<T> callback) {
return tokenize(Pattern.compile(pattern), text, callback);
}
public static <T> List<T> tokenize(String pattern, int flags, String text, TokenizeCallback<T> callback) {
return tokenize(Pattern.compile(pattern, flags), text, callback);
}
public static <T> List<T> tokenize(Pattern pattern, String text, TokenizeCallback<T> callback) {
List<T> ret = new ArrayList<T>();
Matcher m = pattern.matcher(text);
boolean result = m.find();
int pos = 0;
if (result) {
do {
if (pos < m.start()) {
ret.add(callback.text(text.substring(pos, m.start())));
}
ret.add(callback.match(m.toMatchResult()));
pos = m.end();
result = m.find();
} while (result);
if (pos < text.length()) {
ret.add(callback.text(text.substring(pos)));
}
} else {
ret.add(callback.text(text));
}
return ret;
}
public static String repeat(String s, int count) {
StringBuilder sb = new StringBuilder(s.length() * count);
while (count-- > 0) {
sb.append(s);
}
return sb.toString();
}
public static boolean empty(String s) {
return s == null || s.length() == 0;
}
public static String join(String delim, String... args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < args.length; i++) {
if (i > 0) {
sb.append(delim);
}
sb.append(args[i]);
}
return sb.toString();
}
}