Java replaceAll对于\n字符无法正常工作

15
我有一个字符串: John \n Barber 现在我想用实际的换行符替换\n,这样它就会变成

John

Barber

这是我的代码:

replaceAll("\\n", "\n");

但是它没有起作用,给我的是相同的字符串John \n Barber


1
我认为使用replaceAll("\\n","\n"); - gifpif
4个回答

31

你需要做的是:

replaceAll("\\\\n", "\n");

replaceAll 方法的第一个参数需要一个正则表达式。在 java 字符串中传递 2 个 \ 实际上只传递了一个。问题在于,\ 在正则表达式中也是一个转义字符,所以 \n 的正则表达式实际上是 \\n,因此你需要再多加一个 \


4

由于在正则表达式中,\n(或甚至是原始的换行符U+000A)被解释为换行字符,因此您需要使用\\n(转义\)来指定斜杠后跟着的n

这是从正则表达式引擎的角度来看的。

从编译器的角度来看,在Java文本字符串中,您需要转义\,因此我们需要添加另一层转义:

String output = inputString.replaceAll("\\\\n", "\n");
//                                      \\n      U+000A

当我尝试这种方式时,它是有效的。String x="x\ny"; String y=x.replaceAll("\n", "\n"); System.out.println(y); - SpringLearner
@java初学者:你的原始字符串已经包含了换行符。 - nhahtdh
这不是OP的方式吗? - SpringLearner
@java初学者:不是的。OP的原始字符串包含一个后面跟着n\,这意味着在Java字面上,它将是"something\\nsomething" - nhahtdh
我很困惑,但还是给这个答案加上1。 - SpringLearner
@javaBeginner: OP的字符串包含了一个后面跟着n的反斜杠\。这就是不同之处。如果你想让它更清晰明了,可以尝试编写一个从命令提示符中获取输入并使用replaceAll函数的程序。 - nhahtdh

3
您需要转义反斜线字符\。因此,请尝试:
replaceAll("\\\\n", "\n");

3

replaceAll 使用正则表达式,你可以使用 replace 来替换所有的 '\n':

replace("\\\\n", "\n");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接