相关疑难解决方法(0)

为什么java中的String.replaceAll()需要在正则表达式中使用4个斜杠"\\\\"来实际替换"\"?

我最近注意到,当涉及转义字符"\"(斜杠)时,String.replaceAll(正则表达式,替换)表现得非常奇怪.

例如,考虑有一个与文件路径字符串- String text = "E:\\dummypath" 我们要替换的"\\""/".

text.replace("\\","/")给出输出"E:/dummypath",然后text.replaceAll("\\","/")引发异常java.util.regex.PatternSyntaxException.

如果我们想要实现相同的功能,replaceAll()我们需要将其编写为, text.replaceAll("\\\\","/")

一个值得注意的区别是replaceAll()它的参数是reg-ex而replace()有参数字符序列!

text.replaceAll("\n","/")其作用与其char序列完全相同text.replace("\n","/")

深入挖掘: 当我们尝试其他一些输入时,可以观察到更奇怪的行为.

让我们分配 text="Hello\nWorld\n"

现在 text.replaceAll("\n","/"),text.replaceAll("\\n","/"),text.replaceAll("\\\n","/")这三个提供同样的输出Hello/World/

Java以我认为最好的方式搞砸了reg-ex!没有其他语言似乎在reg-ex中具有这些有趣的行为.任何特定的原因,为什么Java搞砸了这样?

java regex string escaping charsequence

27
推荐指数
3
解决办法
4万
查看次数

创建文件Java时转义正斜杠

我正在创建一些文件,并且正在从数据库中获取文件名。

有一个文件名为

CUA / ICOR数字馆藏。

但是,由于正斜杠,“ CUA”被视为目录。

在Java正则表达式中发现了正斜杠

我已经尝试过:

String fileName = "CUA/ICOR Digital Collection";
fileName = fileName.replaceAll("/", "\\\\/");  // OP: CUA\/ICOR Digital Collection But No success

fileName = fileName.replaceAll("/", Matcher.quoteReplacement("\\/"));  // OP: CUA\/ICOR Digital Collection But No success

fileName = fileName.replaceAll("/", Matcher.quoteReplacement("\\\\/"));  // OP: CUA\\/ICOR Digital Collection But No success

File file = new File(exportPath, fileName + ".xls");
Run Code Online (Sandbox Code Playgroud)

我正进入(状态

File Not Found Exception At 'C:\export\CUA\ICOR Digital Collection.xls'
Run Code Online (Sandbox Code Playgroud)

所以,现在我怀疑这可能吗?

java escaping file

2
推荐指数
1
解决办法
5958
查看次数

标签 统计

escaping ×2

java ×2

charsequence ×1

file ×1

regex ×1

string ×1