有没有办法在string上使用replaceAll但是调用方法来替换每次匹配时的文本

Nic*_*Div 1 java string replaceall

我想用不同的UUID替换所有出现的特定字符串.例如,

content = content.replaceAll("xyz", "xyz" + generateUUID());
Run Code Online (Sandbox Code Playgroud)

但问题是所有"xyz"的将被相同的UUID取代.但我希望每个"xyz"都被个人唯一ID取代.如何才能做到这一点?

dur*_*597 5

你可以使用Matcher.appendReplacement.这将为您replaceAll提供完整正则表达式的功能(而不仅仅是静态String).在这里,我用uidCounter的很简单generateUUID; 你应该能够适应你自己的generateUUID功能.

public class AppendReplacementExample {
  public static void main(String[] args) throws Exception {
    int uidCounter = 1000;

    Pattern p = Pattern.compile("xyz");
    String test = "abc xyz def xyz ghi xyz";
    Matcher m = p.matcher(test);
    StringBuffer sb = new StringBuffer();

    while(m.find()) {
      m.appendReplacement(sb, m.group() + uidCounter);
      uidCounter++;
    }
    m.appendTail(sb);

    System.out.println(sb.toString());
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

abc xyz1000 def xyz1001 ghi xyz1002
Run Code Online (Sandbox Code Playgroud)