Java Regex -使用String的replaceAll方法替换换行符

dluptydi  于 2023-03-21  发布在  Java
关注(0)|答案(8)|浏览(211)

我有一个字符串,想简单地用字符串" --linebreak-- "替换其中的所有换行符。
只要写就够了吗:

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

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

4szc88ey

4szc88ey1#

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

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

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

请注意,replace()仍然替换 all 的出现,replaceAll()也是如此--不同之处在于replaceAll()使用正则表达式进行搜索。

i34xakig

i34xakig2#

使用下面的正则表达式:

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

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

jhdbpxl9

jhdbpxl93#

由于Java 8正则表达式引擎支持\R,它表示任何行分隔符(更多信息:https://stackoverflow.com/a/31060125/1393766)。
因此,如果您可以访问Java 8或更高版本,则可以使用

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

e1xvtsh34#

不需要2 backslashes

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

输出= hello --linebreak-- world

7qhs6swi

7qhs6swi5#

只是为了完整性而添加这个,因为2反斜杠是真实的。
请参考以下SO问题中的@dasblinkenlight答案(谈论\t,但它也适用于\n):
java, regular expression, need to escape backslash in regex
“对于转义序列有两种解释:首先由Java编译器执行,然后由正则表达式引擎执行。当Java编译器看到两个斜杠时,它用单个斜杠替换它们。当斜杠后面有t时,Java用制表符替换它;当双斜杠后面有一个t时,Java会不去管它。但是,因为两个斜杠被一个斜杠代替了,所以regexp引擎会看到\t,并将其解释为制表符。

5lwkijsr

5lwkijsr6#

看起来不错。你不会想要两个反斜线的。
http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum

nr9pn0ug

nr9pn0ug7#

对于新行,存在一个属性

System.getProperty("line.separator")

在这里,作为你的例子,

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

hivapdat8#

在我的例子中,我想用文字'\n'替换,所以我用另一个\转义了\,如下所示

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

相关问题