如何从字符串中删除多个新行和空格(白色字符)?

时间:2016-08-23 17:00:19

标签: java regex string replace

字符串如下所示:" I am seal \n\n \t where are we? "。和印刷版

   I am  seal 

      where are we? 

我想将字符串设为:"I am seal\nwhere are we?"

I am seal
where are we?

我正在删除"[\r\n]+", "\n"此正则表达式的新行,但问题是当我尝试删除空格时,它也会删除换行符。我使用了StringUtils中的Apache-common

更新

也可以删除一行开头的空白区域。它不应该是连续的。

我如何在 Java

中实现这一目标

谢谢。

3 个答案:

答案 0 :(得分:4)

更新#2

捕获所有初始空格(插入符^断言我们处于行首)和其他连续空格:

^\\s+|[\\t\\f ](?=[\\t\\f ])|[\\t\\f ]$|\\s+\\z

将其替换为空(多线修改器非常重要):

String str = "   I am   seal \n\n  \t   where are we? ";
String result = str.replaceAll("(?m)(^\\s+|[\\t\\f ](?=[\\t\\f ])|[\\t\\f ]$|\\s+\\z)", "");
System.out.println(result);

Live demo

同样在class intersection的帮助下,我们可以使用更短的正则表达式:

^\\s+|[\\s&&[^\\r\\n]](?=\\s|$)|\\s+\\z

答案 1 :(得分:1)

您问题中的所有空格和换行符之间存在差异 使用单个正则表达式,您可以决定要替换哪个。

空格或换行符。
唉,这需要一个回调函数来查看哪一个匹配 ([^\S\r\n])+|(?:\r?\n)+
第1组?替换为空格:否则换成换行符。

更简单的方法是在两个单独的步骤中完成。

用空格替换所有[^\S\r\n]+ 然后用换行符替换所有(?:\r?\n)+

您可以使用范围{2,}代替+,这可能会给您一个边际 性能提升。

答案 2 :(得分:0)

    str = str.trim().replace("\t", " ");
    while (str.contains("  ") || str.contains("\n\n")) {
        while (str.contains("  ")) {
            str = str.replace("  ", " ");
        }
        while (str.contains("\n\n")) {
            str = str.replace("\n\n", "\n");
        }
        while (str.contains("\n ")) {
            str = str.replace("\n ", "\n");
        }

    }