在Java中寻找快速、简单的方法来更改此字符串

" hello     there   "

变成了这样的东西

"hello there"

在这里我用一个空格替换了所有这些多个空格,除了我还希望字符串开头的一个或多个空格消失。

像这样的事情能让我在一定程度上做到

String mytext = " hello     there   ";
mytext = mytext.replaceAll("( )+", " ");

但事实并非如此。


当前回答

String str = "  this is string   ";
str = str.replaceAll("\\s+", " ").trim();

其他回答

trim()方法删除开头和结尾的空格,使用regex“\s+”的replaceAll("regex", "string to replace")方法匹配多个空格,并将其替换为单个空格

myText = myText.trim().replaceAll("\\s+"," ");

要消除字符串开头和结尾的空格,请使用String#trim()方法。然后使用你的mytext。replaceAll("()+", " ")。

看到String.replaceAll。

使用正则表达式“\s”并替换为“”。

然后使用String.trim。

您可以首先使用String.trim(),然后对结果应用regex replace命令。

试试这个:

String after = before.trim().replaceAll(" +", " ");

另请参阅

String.trim () 返回字符串的副本,省略前导和尾随空格。 regular-expressions.info /重复


没有trim()正则表达式

只用一个replaceAll也可以做到这一点,但这比trim()解决方案可读性差得多。尽管如此,这里提供它只是为了展示regex可以做什么:

    String[] tests = {
        "  x  ",          // [x]
        "  1   2   3  ",  // [1 2 3]
        "",               // []
        "   ",            // []
    };
    for (String test : tests) {
        System.out.format("[%s]%n",
            test.replaceAll("^ +| +$|( )+", "$1")
        );
    }

有三名候补:

^_+:字符串开头的任意空格序列 匹配并替换为$1,它捕获空字符串 _+$:字符串结尾的任意空格序列 匹配并替换为$1,它捕获空字符串 (_)+:不匹配上述任何一个空格序列,表示它在中间 匹配并替换为$1,它捕获单个空格

另请参阅

regular-expressions.info /锚