2012-06-11 69 views
0

我有一個字符串s,我想分解,所以每個部分由「|」符號成爲字符串數組的一個元素。Java分離字符串

這是我該怎麼做呢?

 String s = "FirstName1 LastName1|FirstName2 LastName2|FirstName3 LastName4|"; 
    String [] names = s.split("|"); 

然後我想將這些元素添加到一個ArrayList。我做了以下

 for(int i = 0; i < names.length; i++) 
     { 
      friendsNames.add(names[i]); 
     } 

但我的ArrayList讀取如下。

Element 1: F 
    Element 2: I 
    Element 3: R 
    Element 4: S 
    Element 5: T 
    Element 6: 
    Element 7: N 

任何關於我哪裏出錯的建議? 等

回答

7

您需要轉義「|」因爲它是正則表達式世界中的一個特殊字符。

String [] names = s.split("\\|"); 

爲什麼2「\」?

對於正則表達式,您可以將「|」與「\ |」。但由於「\」是Java的轉義字符,因此您需要將其轉義以保留正則表達式的「\」。

+0

你是什麼意思逃脫? –

+0

工作,謝謝! –

+1

特殊字符被正則表達式引擎解釋爲特別是在如何處理字符串方面。 「轉義」一個特殊字符意味着在它前面添加一個標記,以讓正則表達式引擎知道不會解釋它,而是將其用作文字字符。 –

0

如果您不打算用分隔符表示正則表達式,請使用Pattern.quote()方法來轉義它包含的任何特殊字符。

String[] items = s.split(Pattern.quote("|")); 

管道字符|表示正則表達式中的替代方法。所以你的分割規範意味着「分割任何空字符串或任何空字符串」。每個角色之間都有空的字符串,所以這就是爲什麼每個角色都分裂的原因。

與管道一樣,特殊的正則表達式字符可以通過\「轉義」。這將它禁用爲特殊字符,並使其與輸入中的|字符相匹配。

使事情變得複雜,\在Java字符和字符串文字中有特殊含義,所以它也需要被轉義—與另一個\字符!這意味着,您的分隔符應該是"\\|"

1

管道是由split方法接受的正則表達式中的特殊字符。因此,您必須轉義該字符才能將其解釋爲分隔符字符。

import static java.util.Arrays.asList; 
//... 
String s = "FirstName1 LastName1|FirstName2 LastName2|FirstName3 LastName4|"; 
List<String> items = asList(s.split("\\|"));