在Java中删除反斜杠和换行符(一起出现)

时间:2012-07-24 15:01:59

标签: java regex

我有来自不同Feed的数据流,我需要清理它。

数据采用特定格式,如果某个句子跨越多行,则使用“\”(反斜杠)分隔,我想删除。 \也出现在文本的其他部分,用于转义引号等,我不想删除这些反斜杠。所以最终我要删除“\\ n”。

我尝试使用正则表达式删除\和\ n但它不起作用:

singleLine.replaceAll("(\\\\n|\\\\r)", "");

我不确定在这种情况下正则表达式会起作用。

4 个答案:

答案 0 :(得分:5)

正则表达式对此并不是必需的;如果我是你,我会用......

singleLine=singleLine.replace("\\\\n", "");

许多人认为替换方法只替换一个,但实际上唯一的区别是replaceAll使用正则表达式,而替换只是替换了String的完全匹配。

如果你确实想要使用正则表达式,我相信你必须做\\\\\\\\(你必须'在'中取消'转义字符,在正则表达式中,所以x4,而不仅仅是x2)

再解释一下

唯一的另一个问题是在你的例子中,你永远不会将singeLine设置为等于任何东西;我不确定你是否隐藏了它,或者错过了它。

编辑: 解释了更多的原因,Java要求你做“\\”来代表一个\。正则表达式也可用于\字符,并要求您再次使用它。如果你只是在Java中使用“\\”,那么正则表达式解析器基本上会收到“\”,它是某些东西的转义字符。你需要给正则表达式解析器中的两个,以逃避它,所以在Java中,你需要做“\\\\”只是为了表示单个“\”的匹配

答案 1 :(得分:2)

该regexp中的每个模式都需要 5 反斜杠字符。

使用:

singleLine.replaceAll("(\\\\\n|\\\\\r)", ""); 

反斜杠字符既是字符串中的转义序列,也是正则表达式中转义序列的。因此,要在正则表达式中表示文字\,您需要使用 4 \字符 - 您的正则表达式需要\\才能获得转义反斜杠,并且< strong>每个需要在java String中进行转义 - 然后是另一个来表示\n\r

String str = "string with \\\n newline and \\\n newline ...";
String repl = str.replaceAll("(\\\\\n|\\\\\r)", "");
System.out.println("str: " + str);
System.out.println("repl: " + repl);

输出:

STR: string with \
 newline and \
 newline ...
REPL: string with  newline and  newline ...

答案 2 :(得分:1)

由于字符串不变性,您需要将返回值分配给另一个String对象或同一对象。

singleLine = singleLine.replaceAll("(\\\\n|\\\\r)", "");

更多信息是here

答案 3 :(得分:1)

请记住,字符串是不可变的。这意味着replaceAll()不会 更改singleLine中的String。您必须使用返回值来获取修改后的String。例如,你可以做

singleLine = singleLine.replaceAll("(\\\\n|\\\\r)", "");
相关问题