使用正则表达式将新行/回车替换为空格

2022-09-01 00:52:31

对于知道的人来说,这是一个非常基本的问题。

而不是从中获取

"This is my text. 

And here is a new line"

自:

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

我得到:

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

任何想法为什么?

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

我想我找到了罪魁祸首。

在下一行中,我执行以下操作:

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

这似乎导致了我的问题。

任何想法为什么?

我显然正在尝试执行以下操作:删除所有非字符,并删除所有新行。


答案 1

\s是正则表达式中空格字符的快捷方式。它在字符串中没有任何意义。==> 您不能在替换字符串中使用它。在那里,您需要准确放置要插入的字符。如果这是一个空格,则仅用作替换。" "

另一件事是:为什么使用3个反斜杠作为转义序列?在Java中,两个就足够了。而且,在字符类中不需要(交替运算符)。|

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

备注

L不更改。如果你想有一个结果,你需要做

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

测试代码:

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

答案 2

对于不同的操作系统,新的换行符是不同的 - Windows 为 '\r\n' 和 Linux 的 '\n'。

为了安全起见,您可以使用正则表达式模式 \R - Java 8 中引入的换行符匹配器

String inlinedText = text.replaceAll("\\R", " ");