用双反斜杠替换反斜杠

12
我希望将字符串中的反斜杠改为双反斜杠。
我有:
String path = "C:\Program Files\Text.txt";

我想要将它改变为

"C:\\Program Files\\Text.txt"

7
那不是语法错误吗? - Anirudh Ramanathan
2
在文件系统路径中,始终使用“/”而不是“\”,因为“/”与操作系统无关。 - Eng.Fouad
你没有(1),因为它无法编译:所以你没有将其转换为(2)的问题。你可能有一个包含单个反斜杠的字符串,不是从字面上派生的,而是来自用户,它已经可以直接使用。双反斜杠仅适用于字符串字面量,并且由编译器转换为单个反斜杠。你没有这个问题。这不是一个真正的问题。 - user207421
2个回答

23

replaceAll使用正则表达式,但是在这里您不需要使用正则表达式,可以直接使用

path = path.replace("\\", "\\\\");

\在字符串字面量中是特殊的。例如,它可以用于:

  • 创建特殊字符,如制表符\t、行分隔符\n \r
  • 或者使用记号来写入字符,比如\uXXXX(其中X是十六进制值,XXXX表示字符在Unicode表中的位置)。

要转义它(并创建\字符),我们需要在它前面再加上另一个\
因此,表示\字符的字符串字面量看起来像"\\"。表示两个\字符的字符串看起来像"\\\\"


9

使用 String#replace() 方法

String s= "C:\\Program Files\\Text.text";
System.out.println(s.replace("\\", "\\\\"));

我遇到了一个错误,错误信息为:“Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1”。 - user2060390
2
@user2060390 你可能在使用replaceAll。你并不真的需要一个正则表达式解决方案,只需使用replace()方法,它期望一个字符串和一个替换字符串即可。 - PermGenError
4
如果你想使用 replaceAll,那么 System.out.println(s.replaceAll("\\\\", "\\\\\\\\")); 可以正常工作。该代码行将把字符串 s 中的所有反斜杠替换为双反斜杠。 - Bernhard Barker
如果你想使用replaceAll,请尝试这个:'System.out.println(s.replaceAll("\\", "\\\\"));' 但是我强烈建议在这种情况下使用非正则表达式的String#replace解决方案。 :) - PermGenError
我正在使用 "Paths.get(selfile)" 获取文件路径,并将其作为输入传递给 "PDDocument.load(input)"。 - user2060390
用“实际反斜杠”代替“真正的反斜杠,这次是真的”。http://xkcd.com/1638/ - Conrad Frix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接