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

" hello     there   "

变成了这样的东西

"hello there"

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

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

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

但事实并非如此。


当前回答

到目前为止,已经提供了很多正确答案,我看到了很多赞。然而,上面提到的方法可以工作,但不是真正优化或不是真正可读的。 我最近遇到了每个开发人员都会喜欢的解决方案。

String nameWithProperSpacing = StringUtils.normalizeSpace( stringWithLotOfSpaces );

你完成了。 这是一个可读的解。

其他回答

试试这个:

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 mytext = " hello     there   ";
mytext = mytext.replaceAll("( +)", " ");

把+放在圆括号内。

这对我来说非常有效:sValue = sValue.trim()。replaceAll("\\s+", " ");

你好,抱歉耽搁了! 以下是你正在寻找的最佳和最有效的答案:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MyPatternReplace {

public String replaceWithPattern(String str,String replace){

    Pattern ptn = Pattern.compile("\\s+");
    Matcher mtch = ptn.matcher(str);
    return mtch.replaceAll(replace);
}

public static void main(String a[]){
    String str = "My    name    is  kingkon.  ";
    MyPatternReplace mpr = new MyPatternReplace();
    System.out.println(mpr.replaceWithPattern(str, " "));
}

所以这个例子的输出将是: 我的名字叫金康。

然而,这个方法也会删除你的字符串可能有的“\n”。如果你不想这样,就用这个简单的方法:

while (str.contains("  ")){  //2 spaces
str = str.replace("  ", " "); //(2 spaces, 1 space) 
}

如果你也想去掉开头和结尾的空格,只需添加:

str = str.trim();

如果你已经在你的项目中使用了Guava(19+节),你可能想要使用这个:

CharMatcher.whitespace().trimAndCollapseFrom(input, ' ');

或者,如果你需要删除空格符号(或U+0020,查看更多空白),使用:

CharMatcher.anyOf(" ").trimAndCollapseFrom(input, ' ');