删除所有空行

reo*_*eox 30 java regex string

我认为这并不难,但我想用String.replaceAll删除所有空行(或者只包含Java中的空格和制表符的行).

我的正则表达式如下:

s = s.replaceAll ("^[ |\t]*\n$", "");
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我环顾四周,但只找到了正则表达式,用于删除没有空格或标签的空行.

Bar*_*ers 76

试试这个:

String text = "line 1\n\nline 3\n\n\nline 5";
String adjusted = text.replaceAll("(?m)^[ \t]*\r?\n", "");
// ...
Run Code Online (Sandbox Code Playgroud)

请注意,正则表达式[ |\t]匹配空格,制表符或管道字符!

编辑

顺便说一句,正则表达式(?m)^\s+$也可以做到这一点.

  • 关于编辑的解决方案:如果你想删除空行本身,应该删除行尾匹配(`$`).否则,正则表达式只会删除行内的任何空格字符,同时仍然保留行. (4认同)
  • 什么是`(m?)`? (3认同)
  • @Val,“(?m)”,而不是“(m?)”,启用*多行模式*。查看此链接了解详细信息:http://www.regular-expressions.info/modifiers.html (2认同)
  • @gucce"这个例子没有正确地逃避Java字符串中的\",因为这里没有必要转义````这是故意使用的.字符串文字中的`\ t`表示传递给正则表达式引擎的制表符,后者对它没有任何问题,因为它是任何其他字符.正则表达式允许我们使用像`\\ t`或`\\n`或`\\ r`这样的表格(因为当我们复制粘贴时,某些IDE会自动添加转义为````````````它到我们的代码)但这并不意味着它优于`\ t`` \n`或`\ r``. (2认同)

Ali*_*aru 8

我不知道 Java/^\s*$[\n\r]{1,}/gm中正则表达式的语法,但是您正在寻找的正则表达式。

你可能用 Java 写成这样:

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

我用 JavaScript 测试了它,它工作正常。


mor*_*ahl 5

我不是一名日常 Java 程序员,因此我很惊讶在 JDK 中没有比正则表达式更简单的方法来完成此操作。

反正,

s = s.replaceAll("\n+", "\n");
Run Code Online (Sandbox Code Playgroud)

会简单一点。

更新:

抱歉,我错过了您还想删除空格和制表符。

s = s.replaceAll("\n[ \t]*\n", "\n");
Run Code Online (Sandbox Code Playgroud)

如果你有一致的换行符就会起作用。如果不是,您可能需要考虑使它们保持一致。例如:

s = s.replaceAll("[\n\r]+", "\n");
s = s.replaceAll("\n[ \t]*\n", "\n");
Run Code Online (Sandbox Code Playgroud)