以下代码使用Javareplace()
中类的方法。String
String a = "abc/xyz";
System.out.println(a.replace("/", "\\"));
/
在给定的字符串a
中被替换为\
.
如果我们使用replaceAll()
如下方法,同样的事情是错误的。
System.out.println(a.replaceAll("/", "\\"));
它会导致java.lang.StringIndexOutOfBoundsException
抛出异常。它需要两个额外的反斜杠\
,如下所示,因为replaceAll()
使用的正则表达式与该replace()
方法不同。
System.out.println(a.replaceAll("/", "\\\\"));
唯一的问题是为什么这种方法在只使用两个像这样的斜线时会a.replaceAll("/", "\\")
抛出java.lang.StringIndexOutOfBoundsException
?
split()
另一方面,该方法最初发出警告Invalid regular expression: Unexpected internal error
(我使用的是 NetBeans 6.9.1)。
String b="abc\\xyz";
System.out.println(b.split("\\")[0]+b.split("\\")[1]); //Issues a warning as specified.
尝试运行它会导致java.util.regex.PatternSyntaxException
抛出异常。
由于它使用 regex 之类的正则表达式replaceAll()
,因此需要四个反斜杠。
System.out.println(b.split("\\\\")[0]+b.split("\\\\")[1]);
为什么a.replaceAll("/", "\\\\");
在前面的例子中没有发出这样的警告或这样的运行时异常,即使它有一个无效的模式?