2015-09-05 194 views
4

考慮這些代碼行簡單:奇怪行爲

public class Main { 

    public static void main(String[] args) { 

     String string = "Lorem,ipsum,dolor,sit,amet"; 
     String[] strings = string.split(","); 

     for (String s : strings) { 
      System.out.println(s); 
     } 
    } 
} 

正如所料,輸出如下所示:

Lorem 
ipsum 
dolor 
sit 
amet 

現在考慮以前的代碼的變型,其中我只是把,|

public class Main { 

    public static void main(String[] args) { 

     String string = "Lorem|ipsum|dolor|sit|amet"; 
     String[] strings = string.split("|"); 

     for (String s : strings) { 
      System.out.println(s); 
     } 
    } 
} 

我希望ŧ他同樣的確切輸出,但奇怪的是:

L 
o 
r 
e 
m 
| 
i 
p 
s 
u 
m 
| 
d 
o 
l 
o 
r 
| 
s 
i 
t 
| 
a 
m 
e 
t 

怎麼了?

回答

7

String#split()方法接受正則表達式和|在正則表達式中有特殊的含義。

查看預期結果轉義|

String[] splits=string.split("\\|"); 

或者你可以使用Pattern類,以避免所有的混亂。

String[] splits= string.split(Pattern.quote("|")); 
+2

而且如果分離器是動態的,例如,作爲參數傳遞給你的方法,使用'.split(Pattern.quote(separator))'。 – Andreas

+0

@Andreas同意,我只喜歡圖案的方式。我只是清除OP的懷疑。 –