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

在Java中删除反斜杠和换行符(同时出现),java,regex,Java,Regex,我需要清理来自不同提要的数据流 数据是特定格式的,如果某个句子跨越多行,则使用“\”(反斜杠)分隔,我想删除它也存在于文本的其他部分,用于转义引号等,我不想删除这些反斜杠。因此,我最终要删除“\\n” 我已尝试使用以下正则表达式来删除\和\n,但无效: singleLine.replaceAll(“(\\\\n \\\\r)”,” 我不确定在这种情况下什么正则表达式可以工作。对于该正则表达式中的每个模式,需要5个反斜杠字符 使用: 反斜杠字符既是字符串中的转义序列,也是regexp中的转义序列。

我需要清理来自不同提要的数据流

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

我已尝试使用以下正则表达式来删除\和\n,但无效:

singleLine.replaceAll(“(\\\\n \\\\r)”,”


我不确定在这种情况下什么正则表达式可以工作。

对于该正则表达式中的每个模式,需要5个反斜杠字符

使用:

反斜杠字符既是字符串中的转义序列,也是regexp中的转义序列。因此,要在regexp中表示一个文本
\
,您需要使用4
\
字符-您的regexp需要
\
获得一个转义反斜杠,这些字符中的每一个都需要在java
字符串中转义
,然后再使用另一个字符来表示
\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 ...

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

使用:

反斜杠字符既是字符串中的转义序列,也是regexp中的转义序列。因此,要在regexp中表示一个文本
\
,您需要使用4
\
字符-您的regexp需要
\
获得一个转义反斜杠,这些字符中的每一个都需要在java
字符串中转义
,然后再使用另一个字符来表示
\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 ...

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

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

更多信息是

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

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

更多信息是

对于这一点,Regex并不是真正必要的;如果我是你,我会用

singleLine=singleLine.replace("\\\\n", "");
许多人认为replace方法只替换一个,但实际上唯一的区别是replaceAll使用regex,而replace只替换字符串的精确匹配

如果你真的想使用正则表达式,我相信你必须这样做(你必须在Java和正则表达式中“清空”转义字符,所以是x4,而不仅仅是x2)

再解释一下

唯一的另一个问题是,在你的例子中,你从来没有将Singleline设置为等于任何东西;我不确定你是把它藏起来了,还是漏掉了

编辑:
在解释“的原因”时,Java还要求您使用“\”来表示一个\。Regex还使用\字符,并要求您再次对其执行相同操作。如果您只是在Java中使用“\\”,正则表达式解析器实际上接收“\”,它是某些事情的转义字符。你需要给正则表达式解析器两个,来转义它,所以在Java中,你需要做“\\\\\”来表示一个匹配的“\”

正则表达式并不是必须的;如果我是你,我会用

singleLine=singleLine.replace("\\\\n", "");
许多人认为replace方法只替换一个,但实际上唯一的区别是replaceAll使用regex,而replace只替换字符串的精确匹配

如果你真的想使用正则表达式,我相信你必须这样做(你必须在Java和正则表达式中“清空”转义字符,所以是x4,而不仅仅是x2)

再解释一下

唯一的另一个问题是,在你的例子中,你从来没有将Singleline设置为等于任何东西;我不确定你是把它藏起来了,还是漏掉了

编辑:
在解释“的原因”时,Java还要求您使用“\”来表示一个\。Regex还使用\字符,并要求您再次对其执行相同操作。如果您只是在Java中使用“\\”,正则表达式解析器实际上接收“\”,它是某些事情的转义字符。您需要为正则表达式解析器提供其中的两个,以便对其进行转义,因此在Java中,您需要执行“\\\\”来表示单个“\”的匹配,请记住字符串是不可变的。这意味着replaceAll()不会更改单行中的字符串。必须使用返回值来获取修改后的字符串。例如,你可以

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

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

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

String
实例是不可变的,并且
String.replaceAll()
创建一个新的
String
实例,您需要存储该实例。输入文本是否包含反斜杠和enn,或者是否包含反斜杠和换行符?你的正则表达式搜索前者。(当然,正如许多答案中所指出的,结果被忽略。)
String
实例是不可变的,并且
String.replaceAll()
创建一个新的
String
实例,您需要存储该实例。输入文本是否包含反斜杠和enn,或者是否包含反斜杠和换行符?你的正则表达式搜索前者。(当然,正如许多答案所指出的,结果被忽略了。)regexp仍然不起作用。模式不匹配
\\n
等。regexp仍然不工作。模式与
\\n
等不匹配。按照他的措辞,他说他在某物中寻找“\\n”。我可能误解了这一点,但我认为他的意思是准确的,而不是“\”我想他指的是“\”后面跟着不同类型的换行符。他用词的方式是,他说他在某物中寻找“\\n”。我可能误解了这一点,但我认为他的意思是准确的,而不是“\”我想他的意思是“\”后面跟着不同类型的换行符