“\\\\”。replaceAll(“\\\\”,“\\”)抛出java.lang.StringIndexOutOfBoundsException

时间:2013-02-01 15:54:11

标签: java string replace str-replace

Java中的以下代码片段:

"\\\\".replaceAll("\\\\", "\\");

抛出异常:

java.lang.StringIndexOutOfBoundsException: String index out of range: 1 (NO_SOURCE_FILE:0)

javadoc on replaceAll确实包含使用反斜杠的警告,建议使用 Matcher.replaceAll Matcher.quoteReplacement 。有没有人知道如何用一个反斜杠替换字符串中所有出现的两个反斜杠?

澄清

上面显示的实际文字只是一个例子,实际的字符串可以在不同的地方出现两次连续的反斜杠。

4 个答案:

答案 0 :(得分:13)

您只需使用String#replace()执行此操作: -

"\\\\".replace("\\\\", "\\")

String#replaceAllregex为参数。所以,你必须两次逃离backslash。一次为Java,然后为Regex。因此,使用replaceAll进行的实际替换将如下所示: -

"\\\\".replaceAll("\\\\\\\\", "\\\\")

但你真的不需要replaceAll

答案 1 :(得分:1)

请改为尝试:

"\\\\".replaceAll("\\{2}", "\\")

replaceAll()的第一个参数是正则表达式,{2}表示必须匹配恰好两次出现的char。

答案 2 :(得分:0)

如果您想使用Matcher.replaeAll(),那么您需要这样的内容:

Pattern.compile("\\\\\\\\").matcher(input).replaceAll("\\\\");

答案 3 :(得分:0)

如果你在替换字符串中有反斜杠,它将被视为转义字符,该方法将尝试读取下一个字符。这就是为什么它抛出StringIndexOutOfBoundsException。