我正在清理Java代码中的传入文本.该文本包含很多"\n",但不是在新行中,而是字面上的"\n".我正在使用String类中的replaceAll(),但是无法删除"\n".这似乎不起作用:
String string; string = string.replaceAll("\\n", "");
这也不是:
String string; string = string.replaceAll("\n", "");
我想最后一个被识别为一个实际的新行,因此文本中的所有新行都将被删除.
此外,从String中删除不同模式的错误文本的有效方法是什么.我正在使用正则表达式来检测它们,像HTML保留字符等等和replaceAll,但每次我使用replaceAll时,整个字符串都被读取,对吧?
更新:谢谢你的答案.我在这里扩展了这个问题:
文本替换效率
我特别询问效率:D
Hooknc是对的.我想发一点解释:
编译完成后,"\\n"转换为"\n"(因为你转义反斜杠).所以正则表达式引擎看到"\n"并认为新行,并将删除那些(而不是你的文字"\n").
"\n"由编译器转换为真正的新行.所以新行字符被发送到正则表达式引擎.
"\\\\n"很难看,但是对.编译器删除转义序列,因此正则表达式引擎看到"\\n".正则表达式引擎看到两个反斜杠并知道第一个反斜杠转义为转换为检查文字字符'\'和'n',为您提供所需的结果.
Java很好(这是我工作的语言)但是必须考虑基本上双重逃避正则表达式可能是一个真正的挑战.为了获得额外的乐趣,StackOverflow似乎也喜欢尝试翻译反斜杠.
我想你需要添加几个slashies ......
String string; string = string.replaceAll("\\\\n", "");
说明:slashies的数量与"\n"本身是Java中的受控字符这一事实有关.
因此,为了获得"\n"的真实字符,我们需要使用"\n".如果打印出来给我们:"\"
您正在寻找替换文件中的所有"\n".但是你不打算更换控件"\n".所以你试过"\n",它将被转换成字符"\n".很棒,但也许不是那么多.我的猜测是,replaceAll方法实际上会使用"\n"字符创建正则表达式,这些字符将被误读为控制字符"\n".
哇,几乎完成了.
使用replaceAll("\\n","")将首先转换将由正则表达式使用的"\\n" - >"\n".然后将在正则表达式中使用"\n",并实际表示"\n"的文本.这是您要替换的内容.
使用正则表达式而不是String.replaceAll(),最好使用String.replace(),它执行简单的字符串替换(如果您至少使用Java 1.5).
String replacement = string.replace("\\n", "");
应该做你想做的事.