我必须摆脱超过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());
}
}
这是实现结果的最佳方式。请建议。谢谢,
答案 0 :(得分:10)
这是最好的方式。
s = s.replaceAll("\\s+", " ");
**这是什么意思?
\ s +是正则表达式。 \ s匹配空格,制表符,换行符,回车符,换页符或垂直制表符,+表示“其中一个或多个”。因此,上面的代码将折叠所有“空格子串”长于一个字符,只有一个空格字符。**
答案 1 :(得分:3)
您可以使用commons-apache中的StringUtils.deleteWhitespace()方法。
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);