这是在Adroid 4.2.2上运行的。使用正则表达式模式和匹配器与appendReplacement()。 它的作用是将从远程源接收的html字符串中的一些占位符替换为一些自定义数据。
奇怪的是,除了'$ 8'之外,所有其他字符串都很好。任何数字跟随'$'它将抛出异常。只有数字或'$'才会抛出。 这是简化的代码段。
String patternStr = "(PlaceHolder)";
final Pattern cPattern = Pattern.compile(patternStr, Pattern.DOTALL);
StringBuffer sb = new StringBuffer();
Matcher matcher = cPattern.matcher(srcData);
try{
while(matcher.find()) {
String newData = "<span>Price: $8 </span> ";
try {
matcher.appendReplacement(sb, newData); //<== throws
} catch (Exception ex) {
ex.printStackTrace();
throw new Exception(ex);
}
}
matcher.appendTail(sb);
例外显示:
java.lang.ArrayIndexOutOfBoundsException: length=4; index=16
java.util.regex.Matcher.group(Matcher.java:353)
java.util.regex.Matcher.appendEvaluated(Matcher.java:137)
java.util.regex.Matcher.appendReplacement(Matcher.java:110)
“$”后跟数字有什么特别之处?
谢谢!
答案 0 :(得分:3)
来自Matcher的oracle页面:source
请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同。如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符。
尝试转义$