以下代码使用Java中的
唯一的问题是,当只使用两个斜杠(如
另一方面,
尝试运行此代码会引发异常
由于使用了类似
String
类的replace()
方法。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
。由于使用了类似
replaceAll()
的正则表达式,因此需要四个反斜杠。System.out.println(b.split("\\\\")[0]+b.split("\\\\")[1]);
为什么在上述代码中,a.replaceAll("/", "\\\\");
没有提示警告或运行时异常,即使它具有无效的模式?