java - Java 的 String.replaceAll(...) 不适用于\\and\

标签 java replaceall

我想从以下位置转换目录路径:

C:\Users\Host\Desktop\picture.jpg

C:\\Users\\Host\\Desktop\\picture.jpg

我正在使用 replaceAll() 函数和其他替换函数,但它们不起作用。

我该怎么做?

我已经打印了声明,它给了我我想要的那个,即 C:\Users\Host\Desktop\picture.jpg 但是现在当我传递这个变量来打开文件时,我得到了这个异常,为什么?

java.io.FileNotFoundException:C:\Users\Host\Desktop\picture.jpg

最佳答案

编辑:从 replaceAll 更改为 replace - 你在这里不需要正则表达式,所以不要使用正则表达式。 (这是 Java API 团队 IMO 的一个非常糟糕的设计决定。)

我的猜测(因为您没有提供足够的信息)是您在做类似的事情:

text.replace("\\", "\\\\");

字符串在Java中是不可变的,所以你需要使用返回值,例如

String newText = oldText.replace("\\", "\\\\");

如果这不能回答您的问题,请提供更多信息。

(我还建议通常你无论如何都不应该自己做 - 如果这是为了将信息包含在 JSON 响应之类的东西中,我希望更广泛的库为你执行转义。)

请注意,需要加倍,因为 \ 是 Java 字符串(和字符)文字的转义字符。请注意,与 replaceAll 不同,replace 不会将输入视为正则表达式模式,因此无需执行进一步的加倍操作。

编辑:您现在得到一个 FileNotFoundException,因为不是一个带有双反斜杠的文件名 - 是什么让您认为有?如果你想把它作为一个有效的文件名,为什么要加倍反斜杠?

关于java - Java 的 String.replaceAll(...) 不适用于\\and\,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9131416/

相关文章:

Java - 使用数组中的值的replace()方法正在更改数组值?

Java 控制台输出 - 文件和控制台两者

java - Spring REST URI 存在检查

java - 实体类 [...] 中带注释的元素 [...] 上的 @JoinColumns 不完整

java - 在Java中,我可以将这些 "replace"命令组合在一起吗?

java - 需要使用replaceAll方法进行替换

Java ReplaceAll 非法重复

java - 如何为 Gmail 配置 Spring JavaMailSenderImpl

java - JWT 解密,但抛出 mac check failed 错误

java - 替换字符串中的一个字符