Replace new line/return with space using regex

2020-02-17 06:49发布

Pretty basic question for someone who knows.

Instead of getting from

"This is my text. 

And here is a new line"

To:

"This is my text. And here is a new line"

I get:

"This is my text.And here is a new line.

Any idea why?

L.replaceAll("[\\\t|\\\n|\\\r]","\\\s");

I think I found the culprit.

On the next line I do the following:

L.replaceAll( "[^a-zA-Z0-9|^!|^?|^.|^\\s]", "");

And this seems to be causing my issue.

Any idea why?

I am obviously trying to do the following: remove all non-chars, and remove all new lines.

标签: java regex
6条回答
我想做一个坏孩纸
2楼-- · 2020-02-17 07:06

The new line separator is different for different OS-es - '\r\n' for Windows and '\n' for Linux.

To be safe, you can use regex pattern \R - the linebreak matcher introduced with Java 8:

String inlinedText = text.replaceAll("\\R", " ");
查看更多
Luminary・发光体
3楼-- · 2020-02-17 07:08

I found this.

String newString = string.replaceAll("\n", " ");

Although, as you have a double line, you will get a double space. I guess you could then do another replace all to replace double spaces with a single one.

If that doesn't work try doing:

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

If I create lines in "string" by using "\n" I had to use "\n" in the regex. If I used System.getProperty() I had to use that.

查看更多
家丑人穷心不美
4楼-- · 2020-02-17 07:10

You May use first split and rejoin it using white space. it will work sure.

String[] Larray = L.split("[\\n]+");
L = "";
for(int i = 0; i<Larray.lengh; i++){
   L = L+" "+Larray[i];  
}
查看更多
放我归山
5楼-- · 2020-02-17 07:18

\s is a shortcut for whitespace characters in regex. It has no meaning in a string. ==> You can't use it in your replacement string. There you need to put exactly the character(s) that you want to insert. If this is a space just use " " as replacement.

The other thing is: Why do you use 3 backslashes as escape sequence? Two are enough in Java. And you don't need a | (alternation operator) in a character class.

L.replaceAll("[\\t\\n\\r]+"," ");

Remark

L is not changed. If you want to have a result you need to do

String result =     L.replaceAll("[\\t\\n\\r]+"," ");

Test code:

String in = "This is my text.\n\nAnd here is a new line";
System.out.println(in);

String out = in.replaceAll("[\\t\\n\\r]+"," ");
System.out.println(out);
查看更多
劫难
6楼-- · 2020-02-17 07:26

Try

L.replaceAll("(\\t|\\r?\\n)+", " ");

Depending on the system a linefeed is either \r\n or just \n.

查看更多
来,给爷笑一个
7楼-- · 2020-02-17 07:27

Your regex is good altough I would replace it with the empty string

String resultString = subjectString.replaceAll("[\t\n\r]", "");

You expect a space between "text." and "And" right?

I get that space when I try the regex by copying your sample

"This is my text. "

So all is well here. Maybe if you just replace it with the empty string it will work. I don't know why you replace it with \s. And the alternation | is not necessary in a character class.

查看更多
登录 后发表回答