2013-01-08 142 views
3

我剛注意到.split()函數有些奇怪,如果我傳遞|它將字符串分割成字符。我對它進行了測試:分割字符串java

String s = "Hiya there | how are you | im fine thanks"; 
for(String str : s.split("|")) { 
    System.out.println(str); 
} 

然後它將它分成不同的字符。我嘗試了反斜槓,它沒有工作。

沒有人知道如何通過| ?

+2

嘗試添加_two_反斜槓。我知道這聽起來很奇怪,但是... –

+0

可能對此有興趣閱讀:http://hoskinator.blogspot.com/2006/11/trouble-using-pipe-with-stringsplit.html –

回答

9

String#split需要一個正則表達式作爲參數,其中|有特殊含義,用於alternation

你可以用兩種方式來讓自己出來的: -

  1. 逃生|。請記住,在Java中,你需要使用雙反斜線: -

    s.split("\\|"); 
    
  2. 使用字符類: -

    s.split("[|]"); 
    

在字符類,任何字符除了-,即當在中間使用時,也沒有任何特別的含義。所以,[|]只是一個|,沒有別的。

是的,你還需要在字符類別中轉義],如@JanDvorak的評論中所指定。

+0

注意'''需要在角色類中也要逃脫 –

+0

@JanDvorak。是的。感謝您指點。 :) –

2

|是正則表達式世界metacharecter,爲了把它當作一個普通的字符,你必須用一個反斜槓\\|逃吧:

public static void main(String...args) throws ParseException{ 
     String s = "Hiya there | how are you | im fine thanks"; 
     for(String str : s.split("\\|")) { 
      System.out.println(str); 
     } 
    } 
0

我總是在正方括號中使用正則表達式,因爲它們通常會隨着新需求的增長而變大,並且使用方括號,與反斜槓相比,它們易於理解。

public static void main(String...args) throws ParseException{ 
    String s = "Hiya there | how are you | im fine thanks"; 
    for(String str : s.split("[|]")) { 
     System.out.println(str); 
    } 
}