java replaceAll 不适用于 \n 字符
Posted
技术标签:
【中文标题】java replaceAll 不适用于 \\n 字符【英文标题】:java replaceAll not working for \n charactersjava replaceAll 不适用于 \n 字符 【发布时间】:2013-09-22 19:25:12 【问题描述】:我有一个这样的字符串:John \n Barber
现在我想用实际的换行符替换 \n,这样它就会变成
John
理发师
这是我的代码
replaceAll("\\n", "\n");
但它不起作用并给我相同的字符串John \n Barber
【问题讨论】:
我认为使用 replaceAll("\\\\n","\\n"); 【参考方案1】:你需要做的:
replaceAll("\\\\n", "\n");
replaceAll
方法的第一个参数需要一个正则表达式。在 java 字符串中传递 2 \
时,您实际上传递了一个。问题是\
也是正则表达式中的转义字符,因此\n
的正则表达式实际上是\\n
,因此您需要两次添加额外的\
。
【讨论】:
【参考方案2】:由于正则表达式中的\n
(甚至是原始换行符U+000A)被解释为换行符,您需要\\n
(转义\
)来指定斜杠\
,后跟@987654325 @。
这是从正则表达式引擎的角度来看的。
从编译器的角度来看,在Java字面量字符串中,需要对\
进行转义,所以我们再增加一层转义:
String output = inputString.replaceAll("\\\\n", "\n");
// \\n U+000A
【讨论】:
当我尝试这种方式时,它的工作,String x="x\ny";字符串 y=x.replaceAll("\\n", "\n"); System.out.println(y); @javaBeginner:您的原始字符串已经包含新行。 不是和OP一样吗? @javaBeginner: No. OP 的原始字符串包含一个\
后跟n
,这意味着在Java 文字中,它将是"something\\nsomething"
我很困惑,仍然为这个答案+1【参考方案3】:
replaceAll 正在使用正则表达式,您可以使用 replace 来替换所有的 '\n':
replace("\\\\n", "\n");
【讨论】:
【参考方案4】:您需要转义 \
字符。所以试试
replaceAll("\\\\n", "\n");
【讨论】:
以上是关于java replaceAll 不适用于 \n 字符的主要内容,如果未能解决你的问题,请参考以下文章