如何在 java 中使用 replaceAll 方法替换特定模式的文本?

How to replace a text of particular pattern using replaceAll method in java?

您好,我正在尝试使用 replaceAll 方法替换具有特定模式的文本,因此首先我使用正则表达式模式查找该文本,然后对所有文本应用 replaceAll 方法。这是我的代码

String regExp = "\$\{rate[+-]\d+(\.\d+)D[0-9]\}";
String text = "${rate+0.0020D2},banana,${rate-0.4002D3},${rate+0.2003D4},${rate+bananD4},${rate+.123.415D4}";

Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(text);

String match = null;

List<String> matches = new ArrayList<String>();
while (matcher.find()) {

    int startIndex = matcher.start();
    int endIndex = matcher.end();
    match = matcher.group();
    matches.add(match.substring(2, match.length() - 1));

}

for(int i=0;i <= matches.size();i++){
text.replaceAll(Pattern.quote(matches.get(i)),Matcher.quoteReplacement("<span class=\"rate\""+i+">"+matches.get(i)+ "</span>")); 
System.out.println(text);
}

但我得到了相同的输出。谁能告诉我哪里做错了

跳出来的是 replaceAll returns 一个字符串,其中进行了更改,它不会更改您调用的字符串它打开(它不能,字符串是不可变的)。

所以:

text = text.replaceAll(Pattern.quote(matches.get(i)),Matcher.quoteReplacement("<span class=\"rate\""+i+">"+matches.get(i)+ "</span>"));