我有来自不同Feed的数据流,我需要清理它。
数据采用特定格式,如果某个句子跨越多行,则使用“\”(反斜杠)分隔,我想删除。 \也出现在文本的其他部分,用于转义引号等,我不想删除这些反斜杠。所以最终我要删除“\\ n”。
我尝试使用正则表达式删除\和\ n但它不起作用:
singleLine.replaceAll("(\\\\n|\\\\r)", "");
我不确定在这种情况下正则表达式会起作用。
答案 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)", "");