7

Java中的以下代码片段:

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

抛出异常:

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

replaceAll上的javadoc确实包含使用反斜杠的警告,并建议使用Matcher.replaceAllMatcher.quoteReplacement。有人有关于如何用单个反斜杠替换字符串中所有出现的两个反斜杠的片段吗?

澄清

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

4

4 回答 4

13

你可以简单地做到这一点String#replace(): -

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

String#replaceAll接受一个regex作为参数。因此,您将不得不backslash两次逃脱。一次 forJava然后 for Regex。因此,实际替换使用replaceAll如下所示: -

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

但是你真的不需要replaceAll这里。

于 2013-02-01T15:57:09.410 回答
1

试试这个:

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

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

于 2013-02-01T16:00:13.730 回答
0

如果你想使用,Matcher.replaeAll()那么你想要这样的东西:

Pattern.compile("\\\\\\\\").matcher(input).replaceAll("\\\\");
于 2013-02-01T15:58:42.307 回答
0

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

于 2013-02-01T16:07:21.723 回答