文本清理和替换:从Java中的文本中删除\ n

我正在清理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", ""); 

应该做你想做的事。

 string = string.replaceAll(""+(char)10, " "); 

尝试这个。 希望能帮助到你。

 raw = raw.replaceAll("\t", ""); raw = raw.replaceAll("\n", ""); raw = raw.replaceAll("\r", ""); 

其他答案已经充分涵盖了如何使用replaceAll执行此操作,以及如何根据需要转义反斜杠。

从1.5。开始,还有String.replace(CharSequence, CharSequence)执行文字字符串替换。 这可以大大简化字符串替换的许多问题,因为不需要转义任何正则表达式元字符.*| ,是的, \本身。

因此,给定一个可以包含子串"\n" (不是'\n' )的字符串,我们可以删除它们如下:

 String before = "Hi!\\n How are you?\\n I'm \n good!"; System.out.println(before); // Hi!\n How are you?\n I'm // good! String after = before.replace("\\n", ""); System.out.println(after); // Hi! How are you? I'm // good! 

请注意,如果您坚持使用replaceAll ,则可以使用Pattern.quote来防止丑陋:

 System.out.println( before.replaceAll(Pattern.quote("\\n"), "") ); // Hi! How are you? I'm // good! 

当你给出一个必须字面匹配而不是正则表达式模式的任意字符串时,你也应该使用Pattern.quote

我用这个解决方案来解决这个问题:

 String replacement = str.replaceAll("[\n\r]", ""); 

通常\ n工作正常。 否则,您可以选择多个replaceAll语句。 首先在文本上应用一个replaceAll,然后在文本上再次重新应用replaceAll。 应该做你想要的。

我相信replaceAll()是一项昂贵的操作。 以下解决方案可能会表现更好:

 String temp = "Hi \n Wssup??"; System.out.println(temp); StringBuilder result = new StringBuilder(); StringTokenizer t = new StringTokenizer(temp, "\n"); while (t.hasMoreTokens()) { result.append(t.nextToken().trim()).append(""); } String result_of_temp = result.toString(); System.out.println(result_of_temp);