當允許的Java 8,你可以使用LAMBDA表達式,有一個JavaScript喜歡更換:
String result = StringReplacer.replace("Hello World!", Pattern.compile("\\S+"), (Matcher m) -> {
return "" + m.group().length();
});
StringReplacer.java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringReplacer {
public static String replace(String input, Pattern regex, StringReplacerCallback callback) {
StringBuffer resultString = new StringBuffer();
Matcher regexMatcher = regex.matcher(input);
while (regexMatcher.find()) {
regexMatcher.appendReplacement(resultString, callback.replace(regexMatcher));
}
regexMatcher.appendTail(resultString);
return resultString.toString();
}
}
StringReplacerCallback.java:
import java.util.regex.Matcher;
public interface StringReplacerCallback {
public String replace(Matcher match);
}
來源:http://www.whitebyte.info/programming/string-replace-with-callback-in-java-like-in-javascript
[這裏](http://stackoverflow.com/a/1282099/20938)是一個更完整的解決方案。它處理美元符號和反斜槓被'appendReplacement()'視爲特殊的問題。 –