如何用一个空行替换多个空格和换行符

use*_*755 5 java string string-formatting

如何删除字符串中的多个空格和换行符,但为每组空行保留至少一个空行.

例如,更改:

"This      is



a        string.




Something."
Run Code Online (Sandbox Code Playgroud)

"This is

a string.

Something."
Run Code Online (Sandbox Code Playgroud)

我正在使用.trim()从字符串的开头和结尾去除空格,但我找不到任何用于删除字符串中的多个空格和换行符的内容.

我想只保留一个空格和一个换行符.

Boh*_*ian 7

删除多个空格/换行符的一行解决方案,但保留多个空白行中至少一个空行:

str = str.replaceAll("(?m)(^ *| +(?= |$))", "").replaceAll("(?m)^$([\r\n]+?)(^$[\r\n]+?^)+", "$1");
Run Code Online (Sandbox Code Playgroud)

每条线都经过修剪.


这是一些测试代码:

String str = "   This       is\r\n    " + 
        "\r\n" + 
        "   \r\n   " + 
        " \r    \n   \n  " +
        "\r\n" + 
        "                a        string.   ";
str = str.trim().replaceAll("(?m)(^ *| +(?= |$))", "").replaceAll("(?m)^$([\r\n]+?)(^$[\r\n]+?^)+", "$1");
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

输出:

This is

a string.
Run Code Online (Sandbox Code Playgroud)

  • @ A4L我修复了关于前导空格的正则表达式:我将第一个正则表达式中的交替顺序更改为行首的*first*匹配空格,然后如果找不到它们与其他多个空格匹配(正则表达式将找到备用匹配项)按照它们编码的顺序).解释正则表达式需要一段时间.我现在没时间 - 也许以后(我会告诉你的) (2认同)