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

" hello     there   "

变成了这样的东西

"hello there"

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

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

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

但事实并非如此。


当前回答

试试这个:

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 /锚

其他回答

试试这个:

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 /锚

你也可以使用环视。

test.replaceAll("^ +| +$|(?<= ) ", "");

OR

test.replaceAll("^ +| +$| (?= )", "")

< >空间(?=)匹配一个空格字符,后面跟着另一个空格字符。所以在连续的空格中,它会匹配除最后一个空格以外的所有空格,因为它后面没有空格字符。这将为删除操作后的连续空格留下一个单独的空格。

例子:

    String[] tests = {
            "  x  ",          // [x]
            "  1   2   3  ",  // [1 2 3]
            "",               // []
            "   ",            // []
        };
        for (String test : tests) {
            System.out.format("[%s]%n",
                test.replaceAll("^ +| +$| (?= )", "")
            );
        }
String blogName = "how to   do    in  java   .         com"; 
 
String nameWithProperSpacing = blogName.replaceAll("\\\s+", " ");

下面的代码将压缩单词之间的空白,并删除字符串开头和结尾的空白

String input = "\n\n\n  a     string with     many    spaces,    \n"+
               " a \t tab and a newline\n\n";
String output = input.trim().replaceAll("\\s+", " ");
System.out.println(output);

这将输出一个包含许多空格、制表符和换行符的字符串

注意,任何不可打印的字符,包括空格、制表符和换行符将被压缩或删除


欲了解更多信息,请参阅相应的文档:

字符串#修剪()方法 String#replaceAll(字符串正则表达式,字符串替换)方法 有关Java正则表达式实现的信息,请参阅Pattern类的文档

削减()

只删除开头和结尾空格。

从Java文档, 返回值为此字符串的字符串,删除前导和尾部的任何空格。

System.out.println(" D ev  Dum my ".trim());

“D ev House my”

replace(), replaceAll()

替换单词中的所有空字符串,

System.out.println(" D ev  Dum my ".replace(" ",""));

System.out.println(" D ev  Dum my ".replaceAll(" ",""));

System.out.println(" D ev  Dum my ".replaceAll("\\s+",""));

输出:

"DevDummy"

"DevDummy"

"DevDummy"

注意:“\s+”为类似空格字符的正则表达式。

参考资料:https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html