replaceAll()的问题

时间:2010-01-27 02:10:55

标签: java

我写了以下代码:

str.replaceAll("xxx(ayyy)xxx", "$1".substring(0,1).equals("a") ? "a" : "b");

但我发现“$ 1”.substring(0,1)将输出“$”而不是“a”。这有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

replaceAll的第二个参数是常规字符串。

Java会在将参数传递给函数之前对其进行评估,而不是针对每个匹配 "$1".substring(0,1)只返回字符串$1中的第一个字符。

您需要循环调用Matcher类的appendReplacement方法。

答案 1 :(得分:3)

如果您想为每场比赛应用不同的替换,请使用appendReplacement / appendTail

Pattern p = Pattern.compile("xxx(ayyy)xxx");
StringBuffer out = new StringBuffer();
Matcher m = p.matcher("...");
while (m.find()) {
    m.appendReplacement(out, m.group(1).substring(0, 1).equals("a") ? "a" : "b");
}
m.appendTail(out);

答案 2 :(得分:-2)

substring(start,end)将从开始到结束前的一个子字符串。如果你想消除第一个元素try substring(1,lengthOfString)