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

左心房为你撑大大i 提交于 2019-12-17 15:53:27

问题


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:


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.




回答2:


Use below regex:

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

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




回答3:


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-- ");



回答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




回答5:


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




回答6:


Looks good. You don't want 2 backslashes.

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




回答7:


for new line there is a property

System.getProperty("line.separator")

Here as for your example,

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


来源:https://stackoverflow.com/questions/9849015/java-regex-using-strings-replaceall-method-to-replace-newlines

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!