简体   繁体   中英

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

I have a string and would like to simply replace all of the newlines in it with the string " --linebreak-- " .

Would it be enough to just write:

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

I'm confused with the regex part of it. Do I need two slashes for the newline? Is this good enough?

Don't use regex! . You only need a plain-text match to replace "\\n" .

Use replace() to replace a literal string with another:

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

Note that replace() still replaces all occurrences, as does replaceAll() - the difference is that replaceAll() uses regex to search.

Use below regex:

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

There's only really two newlines for UNIX and Windows OS.

Since Java 8 regex engine supports \\R which represents any line separator (little more info: https://stackoverflow.com/a/31060125/1393766 ).

So if you have access to Java 8 you can use

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

No need for 2 backslashes .

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

Output = hello --linebreak-- world

Just adding this for completeness, because the 2 backslash thing is real.

Refer to @dasblinkenlight answer in the following SO question (talking about \\t but it applies for \\n as well):

java, regular expression, need to escape backslash in regex

"There are two interpretations of escape sequences going on: first by the Java compiler, and then by the regexp engine. When Java compiler sees two slashes, it replaces them with a single slash. When there is t following a slash, Java replaces it with a tab; when there is at following a double-slash, Java leaves it alone. However, because two slashes have been replaced by a single slash, regexp engine sees \\t, and interprets it as a tab."

for new line there is a property

System.getProperty("line.separator")

Here as for your example,

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

In my case I wanted to replace with literal '\n' so I escaped the \ with another \ like so

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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