如何在java字符串中用'/'替换'\'

Fra*_*cis 6 java string

我已生成一个文件名并存储在尝试使用的字符串变量路径中

path=path.replaceAll('\','/') 
Run Code Online (Sandbox Code Playgroud)

但这不起作用

J.A*_*.L. 36

replaceAll()需要Strings作为参数.所以,如果你写

path = path.replaceAll('\', '/');
Run Code Online (Sandbox Code Playgroud)

它失败了因为你应该写的

path = path.replaceAll("\", "/");
Run Code Online (Sandbox Code Playgroud)

但这也失败了,因为字符'\'应该输入'\\'.

path = path.replaceAll("\\", "/");
Run Code Online (Sandbox Code Playgroud)

这将在执行期间失败给你一个PatternSyntaxException,因为fisr String是一个正则表达式(感谢@Bhavik Shah指出它).因此,将其写为RegEx,就像@jlordo在他的回答中所说:

path = path.replaceAll("\\\\", "/");
Run Code Online (Sandbox Code Playgroud)

是你在找什么.

为了使核心最佳化,您应该使其独立于操作系统,因此请使用@Thai Tran的提示:

path = path.replaceAll("\\\\", File.separator);
Run Code Online (Sandbox Code Playgroud)

但这失败了StringIndexOutOfBoundsException(我不知道为什么).如果您使用replace()没有正则表达式,它可以工作:

path = path.replace("\\", File.separator);
Run Code Online (Sandbox Code Playgroud)

  • 这给出了PatternSyntaxException (2认同)

Tha*_*ran 11

如果是文件路径,则应尝试"File.separator"而不是"\"(以防您的应用程序与Nix平台一起使用)

  • +1深入了解OP的问题并显示最佳答案,即使是为了将来的正确性. (3认同)

jlo*_*rdo 7

path=path.replaceAll('\','/');不会编译,因为你必须逃避反斜杠,

使用path=path.replace('\\','/');(它将替换所有的Occrurences,参见JavaDoc)

path=path.replaceAll("\\\\", "/");(这个正则表达式逃避反斜杠);-)

在评论中有一个解释,为什么你需要4个"\"来为一个"\"制作正确的正则表达式.

  • 是的,反斜杠也是正则表达式中的一个特殊字符。因此,在字符串中,这将是一个反斜杠:`"\\"`,要在正则表达式中转义反斜杠,它必须以反斜杠开头,就像在字符串中一样,因此您需要两个反斜杠来表示一个反斜杠一个正则表达式。两个反斜杠看起来像这样:`"\\\\"`。希望这能澄清一点 (2认同)