use*_*740 20 java regex replace function matchevaluator
我正在寻找一种非常简单的方法来获得类似以下JavaScript代码的东西.也就是说,对于每个匹配,我想调用某个转换函数并将结果用作替换值.
var res = "Hello World!".replace(/\S+/, function (word) {
// Since this function represents a transformation,
// replacing literal strings (as with replaceAll) are not a viable solution.
return "" + word.length;
})
// res => "5 6"
Run Code Online (Sandbox Code Playgroud)
只有..在Java中.并且,优选地作为可以重复使用的"单一方法"或"模板".
jta*_*orn 19
您的答案在Matcher#appendReplacement文档中.只需将函数调用放入while循环中即可.
[appendReplacement方法]旨在与appendTail和find方法一起用于循环.例如,下面的代码将一只狗在院子里的两只狗写入标准输出流:
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)
Joo*_*gen 14
从 Java 9 开始Matcher.replaceAll:
Pattern.compile("\\S+").matcher("Hello World!")
.replaceAll(mr -> "" + mr.group().length());
Run Code Online (Sandbox Code Playgroud)
自由命名的参数mr是 a MatchResult,具有类似mr.group(1)or 的访问方法mr.end() - mr.start()。
在允许Java 8时,您可以使用Lambda-Expressions来获得类似于替换的JavaScript:
String result = StringReplacer.replace("Hello World!", Pattern.compile("\\S+"), m -> ("" + m.group().length()));
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
StringReplacerCallback.java:
import java.util.regex.Matcher;
public interface StringReplacerCallback {
public String replace(Matcher match);
}
Run Code Online (Sandbox Code Playgroud)
资料来源:http://www.whitebyte.info/programming/string-replace-with-callback-in-java-like-in-javascript
| 归档时间: |
|
| 查看次数: |
6259 次 |
| 最近记录: |