删除字符串中的空格

时间:2012-02-10 08:03:52

标签: java regex

我必须摆脱超过1个空间,即如果有超过1个空格我用单个空格替换它。这就是我做到了这一点,但我真的很困惑,这是做到这一点的最佳方式,以及所有这些的区别。下面是我的代码:

     public class SspaceDemo {

public static void main(String[] as) {
    String s="  Hi this   space  Demo   ";

    String  s1 = s.replaceAll("\\s +", " ");
    System.out.println(s1.trim());
    String  s2 = s.replaceAll(" +", " ");
    System.out.println(s2.trim());
    String  s3 = s.replaceAll(" {2,}", " ");
    System.out.println(s3.trim());
}
}

这是实现结果的最佳方式。请建议。谢谢,

7 个答案:

答案 0 :(得分:10)

这是最好的方式。

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

**这是什么意思?

\ s +是正则表达式。 \ s匹配空格,制表符,换行符,回车符,换页符或垂直制表符,+表示“其中一个或多个”。因此,上面的代码将折叠所有“空格子串”长于一个字符,只有一个空格字符。**

答案 1 :(得分:3)

您可以使用commons-apache中的StringUtils.deleteWhitespace()方法。

@see http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/StringUtils.html#deleteWhitespace%28java.lang.String%29

Personnaly我会为此目的避免使用正则表达式。

玩得开心!

答案 2 :(得分:3)

我会选择replaceAll(" {2,}", " ")。在致电trim()之前,我也会致电replaceAll。我认为,这些将导致最少的实际替换,这可能具有(非常)轻微的速度优势。

然而,它们几乎都是等价的,除非你在一个紧凑的循环中执行 lot ,只需选择一个可行的并继续使用它。如果你真的关心性能,你应该自己逐个字符地扫描。这是一个更多的编程工作,但可能会比replaceAll所涉及的重型正则表达式机器执行得更快。

答案 3 :(得分:2)

"\\s +"" +"有点不同:第一个捕获任何空白(制表符,空格是主要空格),后跟至少一个空格,而第二个只捕获空格。对于+{2,},后者可能更有效,但前者更具可读性。我更喜欢它。

答案 4 :(得分:0)

我认为搜索的正确正则表达式是:

"\\s{2,}"

答案 5 :(得分:0)

    public static String removeExtraWhiteSpaces(String str){
        String myString = str.replaceAll("\\s+", " ").trim();
        return myString;
    }

    public static String removeAllWhiteSpaces(String str){
        String myString = str.replaceAll("\\s+", "").trim();
        return myString;

    }

答案 6 :(得分:-2)

试试这个

String str=s.replaceAll("[^\\p{Print}]","");
System.out.println(str);