我正在寻找一种 非常简单的 方法来获得与以下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"
只有..在Java中。并且,优选地,作为可重复使用的“单一方法”或“模板”。
您的答案在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());