我有来自不同提要的数据流,我需要清理这些数据流。
数据采用特定格式,如果某些句子跨越多行,则使用“\”(反斜杠)分隔,我想删除它。\ 也出现在文本的其他部分,用于转义引号等,我不想删除这些反斜杠。所以最终我想删除“\\n”。
我尝试按照正则表达式删除 \ 和 \n 但它不起作用:
singleLine.replaceAll("(\\\\n|\\\\r)", "");
我不确定在这种情况下什么正则表达式会起作用。
正则表达式对此并不真正必要。如果我是你,我会用...
singleLine=singleLine.replace("\\\\n", "");
很多人认为replace方法只替换一个,但实际上唯一的区别是replaceAll使用的是正则表达式,而replace只是替换String的完全匹配。
但是,如果您确实想使用正则表达式,我相信您必须这样做 \\\\\\\\ (您必须在Java和正则表达式中“取消”转义字符,所以x4,而不仅仅是x2)
再解释一下
唯一的另一个问题是在您的示例中,您从未将 singLine 设置为等于任何值;我不确定你是隐藏了还是错过了。
编辑:进一步解释 \\\\\\\\ 的原因,Java 要求您使用 "\\" 来表示一个 \。正则表达式还可以使用 \ 字符,并要求您再次为它做同样的事情。如果您只是在 Java 中使用“\\”,则正则表达式解析器本质上会接收“\”,它是某些事物的转义字符。您需要给正则表达式解析器其中两个以进行转义,因此在 Java 中,您需要执行 "\\\\" 来表示单个 "\" 的匹配
该正则表达式中的每个模式都需要5 个反斜杠字符。
采用:
singleLine.replaceAll("(\\\\\n|\\\\\r)", "");
反斜杠字符既是字符串中的转义序列,也是正则表达式中的转义序列。因此,要在正则表达式中表示文字\
,您需要使用4 个 \
字符 - 您的正则表达式需要\\
得到一个转义的反斜杠,并且每个都需要在 java 中转义String
- 然后另一个来表示\n
or \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 ...
由于 String 的不可变性,您需要将返回值分配给另一个 String 对象或同一个对象。
singleLine = singleLine.replaceAll("(\\\\n|\\\\r)", "");
更多信息在这里
请记住,字符串是不可变的。这意味着 replaceAll() 不会更改singleLine 中的字符串。您必须使用返回值来获取修改后的字符串。例如,你可以做
singleLine = singleLine.replaceAll("(\\\\n|\\\\r)", "");