我写了以下代码:
str.replaceAll("xxx(ayyy)xxx", "$1".substring(0,1).equals("a") ? "a" : "b");
但我发现“$ 1”.substring(0,1)将输出“$”而不是“a”。这有什么方法可以解决这个问题吗?
答案 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)