Discuss / Java / 提问

提问

Topic source

Faded-零

#1 Created at ... [Delete] [Delete and Lock User]

在本节第二个例子当中,如果将正则表达式\\s+ 换成\\s* 或是\\s?,结果有很大区别,但不懂这结果怎么来的:

public class Main {
    public static void main(String[] args) {
        String s = "The     quick\t\t brown   fox  jumps   over the  lazy dog.";        
        String r1 = s.replaceAll("\\s+", " ");        
        String r2 = s.replaceAll("\\s*", " ");        
        String r3 = s.replaceAll("\\s?", " ");        
        System.out.println(r1);        
        System.out.println(r2);        
        System.out.println(r3);
    }
}
//The quick brown fox jumps over the lazy dog.
// T h e  q u i c k  b r o w n  f o x  j u m p s  o v e r  t h e  l a z y  d o g .
// T h e      q u i c k    b r o w n    f o x   j u m p s    o v e r  t h e   l a z y  d o g . 

sheamus94

#2 Created at ... [Delete] [Delete and Lock User]

\\s+表示至少一个空格字符,所以一个或多个的空格被替换成一个。

\\s*表示任意个空格字符,可以使0个,也就是没有字符,比如the三个字符之间可以看成t加无字符加h加无字符加e,转换后为t h e ,也可以是一个或多个,如上。

\\s?表示0或1个,0如上,1的话:“       ”由多个“ ”组成,一个“ ”转化后还是“ ”,多个“ ”转化后还是“     ”。


  • 1

Reply