無いと困るので、適当にでっちあげた。
appendReplacemnt と appendTail を直接使ってもいいと思う。import java.util.regex.Matcher;
import java.util.regex.Pattern;
@FunctionalInterface
interface RegexpReplaceUtilCallback {
public String call(Matcher matcher);
}
/**
* import static RegexpReplaceUtil.*;
*
* String replacement with lambda.
*
*/
class RegexpReplaceUtil {
/**
* replaceOnce("hoge${var}", Pattern.compile("\\$\\{.*?\\}"), (m) -> {
* return vars.get(m.group(1));
* });
*
* @param str
* @param pattern
* @param callback
* @return
*/
public static String replaceOnce(String str, Pattern pattern, RegexpReplaceUtilCallback callback){
Matcher m = pattern.matcher(str);
StringBuffer sb = new StringBuffer(str.length());
if(m.find()){
m.appendReplacement(sb, callback.call(m));
}
m.appendTail(sb);
return sb.toString();
}
/**
* replaceAll("hoge${var}", Pattern.compile("\\$\\{.*?\\}"), (m) -> {
* return vars.get(m.group(1));
* });
*
* @param str
* @param pattern
* @param callback
* @return
*/
public static String replaceAll(String str, Pattern pattern, RegexpReplaceUtilCallback callback){
Matcher m = pattern.matcher(str);
StringBuffer sb = new StringBuffer(str.length());
while(m.find()){
m.appendReplacement(sb, callback.call(m));
}
m.appendTail(sb);
return sb.toString();
}
}
コメント