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

Java 如何从字符串中删除多个新行和空格(白色字符)?,java,regex,string,replace,Java,Regex,String,Replace,字符串如下所示:“我是seal\n\n\t我们在哪里?”。还有印刷版 I am seal where are we? 我想将字符串设置为:“我是seal\n我们在哪里?” 我正在使用此正则表达式删除新行[\r\n]+,“\n”,但问题是,当我试图删除空白时,它也会删除新行。我使用了来自ApacheComon的StringUtils 更新 此外,行首的空白也将被删除。它不应该是连续的 如何在Java中实现这一点 多谢各位 更新#2 捕捉所有初始空格(插入符号^表示我们位

字符串如下所示:
“我是seal\n\n\t我们在哪里?”
。还有印刷版

   I am  seal 

      where are we? 
我想将字符串设置为:
“我是seal\n我们在哪里?”

我正在使用此正则表达式删除新行[\r\n]+,“\n”,但问题是,当我试图删除空白时,它也会删除新行。我使用了来自ApacheComon的
StringUtils

更新

此外,行首的空白也将被删除。它不应该是连续的

如何在Java中实现这一点

多谢各位

更新#2

捕捉所有初始空格(插入符号
^
表示我们位于行的开头)和其他连续空格:

^\\s+|[\\t\\f ](?=[\\t\\f ])|[\\t\\f ]$|\\s+\\z
将其替换为nothing(启用多行修改器很重要):

此外,在的帮助下,我们可以使用较短的正则表达式:

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

在你的问题中,所有空格和换行符都有区别。
使用单个正则表达式,您可以决定用哪个替换

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

第一组?替换为空格:否则替换为换行符

更简单的方法是分两步进行

用空格替换所有
[^\S\r\n]+

然后用换行符替换所有
(?:\r?\n)+

您可以使用范围
{2,}
而不是
+
,这可能会给您一个边际

性能提升。

感谢您的回复。您的正则表达式只使用行开头的空格。但它应该删除每行中所有连续的空白。不。它应该删除所有连续的空白以及新行,无论是在开头、中间还是结尾。:)还需要删除第二行开头的空白。虽然它不一定是连续的。每个管道
表示一个交替,因此您实际上指的是
[\\t\\f](?=[\\t\\f])
[\\t\\f]$
。第一个是指空格(
\t
选项卡、
\f
表单提要或空格字符),后跟同一字符类的另一个空格。“第二面”表示出现在每行末尾的所有空白字符@这些被
\\s+\\z
(字符串末尾的空格)和
^\\s+
(每行开头的空格)捕获<代码>\s匹配
[\r\n\t\f]
类的任何字符@谢谢你的答复。修剪整个字符串后,除第一行外,每行中都有一个空格。它也应该被移除。它可能不希望在新行之后出现空白。我已经更新了我的问题。然后你需要这个
[^\S\r\n]*(?:\r?\n)+[^\S\r\n]*([^\S\r\n])+
或者分两步,
[^\S\r\n]*(?:\r?\n)+[^\S\r\n]*
首先,然后
[^\S\r\n]+
,不要使用
{2,
范围量词。
    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");
        }

    }
^\\s+|[\\s&&[^\\r\\n]](?=\\s|$)|\\s+\\z
    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");
        }

    }