2015-04-02 64 views
0

我試圖閱讀關於正則表達式和轉義,但沒有運氣。如何使用指定的分隔符在java中分割字符串,而忽略/?

我有一個字符串,它看起來像這樣:

String s = "4/18/2015|Planned|Linux|Maintenance"; 

我想將它與分隔符拆分「|」 :

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

正確的結果,我希望這是

tokens[0] is "4/18/2015", 
tokens[1] is "Planned", 
tokens[2] is "Linux", 
token[3] is "Maintenance", 

但它給我一些怪異的結果是這樣的:

tokens[0] is null 
tokens[1] is 4 
tokens[2] is/
and tokens[3] is 1 

我猜測這是因爲斜槓「/ '在那個日子,這是爲什麼。我試圖搜索許多現有的問題,並嘗試了建議的方法,但無濟於事。

+0

什麼是「一些奇怪的結果」? – 2015-04-02 04:50:37

+4

'請幫助我,我會upvote正確的答案,並接受最好的。 '這是非常明顯的和預計太:) – vks 2015-04-02 04:51:57

+0

檢查了這一點,https://ideone.com/qZcIFF – Nielarshi 2015-04-02 04:56:01

回答

3

只需使用

split("\\x7C") 

split("\\|") 

你需要逃跑或使用相應的Unicode值對管道字符分割時, '|'。

+0

我試着你以前的建議split(「\\ |」),它的工作。我需要接受你的答案,但是這不會讓我這樣做,它有10分鐘的限制。我稍後會接受你的回答。 – hiew1 2015-04-02 04:55:37

+0

這裏所說的「十六進制代碼」是unicode代碼點;請注意,這僅在Java 7以後纔可用! – fge 2015-04-02 05:05:40

+0

感謝信息人。進行編輯。 – mushfek0001 2015-04-02 05:09:49

2

逃脫豎線:

s.split("\\|"); 

因爲在正則表達式管道標誌的含義是OR,所以逃避它,你需要\|但在正則表達式,你需要逃避\也因此\\|會工作。

或作爲mushfek0001建議:

split("\\x7C") 
4
@mushfek0001 got it right

大多數正則表達式中的管道是變化的元字符;基本上,你要求正則表達式引擎在這裏執行的操作是:「對空字符串或空字符串進行分割」。

而且,嗯,這意味着你可能每次都會變空,除非正則表達式引擎不是傻瓜,並且如果在分割中檢測到空匹配,則引擎會在再次分割之前前進一個字符...因此你的結果(不知道爲什麼第一個元素是null而不是空字符串,雖然)。

因此,您應該分爲"\\|"而不是"|"

更重要的是,如果你這樣做反覆,使用Pattern代替:

private static final Pattern PIPE = Pattern.compile("\\|"); 

// ... 

final String[] tokens = PIPE.split(yourInput); 
+0

這是一些不錯的信息!!!!!!!!! – vks 2015-04-02 04:59:20

+0

謝謝fge!它有很大幫助!我應該接受你的,但mushfek0001來解決我的問題。非常感謝你,我高舉你的答案。 – hiew1 2015-04-02 05:12:56

相關問題