48

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?

1
  • 1
    Either works. See the answers to this question for a great explanation. Commented Mar 24, 2012 at 4:06

8 Answers 8

79

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.

Sign up to request clarification or add additional context in comments.

3 Comments

@Bohemian Not sure if that's totally true--in a string with a bunch of multiple-spaces ( " " ), doing replaceAll("\\s+"," ") will reduce all multi-space sections down to one, but simply replace(...) will only do it once.
@Amalgovinus replace() replaces them all. The problem is that replaceAll() is badly named: Both methods replace all occurrences - the only difference between them is that replaceAll() uses regex for finding matches, while replace uses plain text.
I use string = string.replace("\\n", System.lineSeparator()); Edit: But that is when I'm passing 'new line characters' in from an external source (like from the command line).. so the above code replaces the literal '/n' with an actual 'new line', you might have been trying to do the reverse.
47

Use below regex:

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

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

2 Comments

s.replaceAll("\r?\n", " --linebreak-- "); work for me
Can also be: s.replaceAll(/^#.*\\r?\\n/, "") . Example using regex delimiters to remove comments.
38

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 or above you can use

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

Comments

4

No need for 2 backslashes.

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

Output = hello --linebreak-- world

Comments

2

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 a t 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."

1 Comment

The other thing that is happening is that the first arg to replaceAll can be a flat string or a regex. In a String the "\n" is interpreted as a literal, but if you include other regex only symbols, like brackets for char sets, then you need the extra slash in order to get correct string to the regex compiler, as you say......eg, "[\\r\\n]+"
1

Looks good. You don't want 2 backslashes.

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

Comments

1

for new line there is a property

System.getProperty("line.separator")

Here as for your example,

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

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.