繁体   English   中英

Java 正则表达式 - 使用 String 的 replaceAll 方法替换换行符

[英]Java Regex - Using String's replaceAll method to replace newlines

我有一个字符串,想简单地将其中的所有换行符替换为字符串" --linebreak-- "

只写:

string = string.replaceAll("\n", " --linebreak-- ");

我对它的正则表达式部分感到困惑。 换行符需要两个斜杠吗? 这够好吗?

不要使用正则表达式! 您只需要一个纯文本匹配来替换"\\n"

使用replace()将文字字符串替换为另一个:

string = string.replace("\n", " --linebreak-- ");

请注意, replace()仍然替换所有出现, replaceAll()也是如此 - 区别在于replaceAll()使用正则表达式进行搜索。

使用以下正则表达式:

 s.replaceAll("\\r?\\n", " --linebreak-- ")

UNIX和Windows操作系统只有两个换行符。

由于Java 8正则表达式引擎支持\\R表示任何行分隔符(更多信息: https//stackoverflow.com/a/31060125/1393766 )。

因此,如果您可以访问Java 8,则可以使用

string = string.replaceAll("\\R", " --linebreak-- ");

不需要2个backslashes

 String string = "hello \n world" ;
 String str = string.replaceAll("\n", " --linebreak-- ");
 System.out.println(str);

输出= hello --linebreak-- world

只是为了完整性添加它,因为2反斜杠是真实的。

请参阅以下SO问题中的@dasblinkenlight答案(谈论\\ t但它也适用于\\ n):

java,正则表达式,需要在正则表达式中转义反斜杠

“转义序列有两种解释:首先是Java编译器,然后是regexp引擎。当Java编译器看到两个斜杠时,它用一个斜杠替换它们。当有一个斜杠后,Java取代它使用制表符;当存在双斜杠时,Java会将其单独保留。但是,因为两个斜杠已被单个斜杠替换,所以regexp引擎会看到\\ t,并将其解释为制表符。“

对于新线路,有一个属性

System.getProperty("line.separator")

在这里你的例子,

string.replaceAll("\n", System.getProperty("line.separator"));

看起来不错。 你不想要2个反斜杠。

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum

就我而言,我想用文字 '\n' 替换,所以我用另一个\ \这样

String input = "a\nb\nc\nd";
/*
a
b
c
d 
*/
input = input.replace("\n", "\\n");
System.out.println(input); // a\nb\nc\nd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM