2017-03-23 19 views
0

當我想用String.split(「|」)方法分割字符串「aaaa | bbbbb | 123456」時,結果是意外的。爲什麼String.split()方法分割具有「|」的字符串以意想不到的方式

我的代碼:

String s = "aaaa|bbbbb|123456"; 
String[] temp = s.split("|"); 
for (String str:temp) { 
    System.out.println(str); 
} 

但結果是:有

a 
a 
a 
a 
| 
b 
b 
b 
b 
b 
| 
1 
2 
3 
4 
5 
6 

有什麼特別字符 「|」 ?

+0

嘗試用String.split( '|')。 –

+1

[可能使用split(「|」)]通過管道符號拆分Java字符串(http://stackoverflow.com/questions/10796160/splitting-a-java-string-by-the-pipe-symbol-使用拆分) –

回答

0

你需要躲避管:

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

管道符號|在正則表達式有特殊的含義,用來表示交替。你的原始代碼導致每個角色之間發生分裂,這不是你想要的。

+0

我意識到有一個確切的副本只有在我最初發布後,因此我無法關閉該問題。 –

0

使用轉義序列,

String s="aaaa|bbbbb|123456"; 
String [] temp=s.split("\\|"); 
for(String str:temp) { 
    System.out.println(str); 
} 
2

在Java中下列字符在正則表達式

轉義[] {}()* + -^$。?|

分裂期間你可以要麼逃脫|字符等

string.split("\\|"); 

你也可以實現使用StringTokenizer如下

字符串測試= 「abc.def.123」 是相同的;

StringTokenizer token = new StringTokenizer(test, "|"); 

while (token.hasMoreTokens()) { 
    System.out.println(token.nextToken()); 
} 

要知道更多關於這必須與正則表達式模式進行轉義看at this post.

0

斯汀分(字符串正則表達式)方法想要一個正則表達式作爲其parameter.It圍繞拆分此字符串中的字符名單給定正則表達式的匹配。

前面的反斜槓(「\」)將元字符轉換爲文字字符。因爲這也是字符串中的Java轉義字符,所以您需要使用「\」來顯示反斜槓字符。用字符'|'分割字符串字符在Java中,

you must use split("\\|") 

。例如,

String s="aaaa|bbbbb|123456"; 
String [] temp=s.split("\\|"); 
for(String str:temp) { 
    System.out.println(str); 
} 

For more detals

Summary of regular-expression constructs

相關問題