2015-02-24 56 views
0

我最近遇到了一個問題,我用「|」分割了一個字符串,作爲論據。例如:什麼時候管道需要放在方括號(匹配)中foo.split()

String foo = "Hello|World"; 
System.out.println(foo.split("|")[1]); 

令我驚訝的打印結果是H.知道這是我的正則表達式用[]包圍它和它的工作正常(打印出的世界)。

我的問題是我怎麼知道何時需要[],因爲我已經使用split |沒有[]之前,它工作得很好。我的Java版本從此沒有改變。唯一的區別是這是一個android項目。

編輯:我似乎錯了,只是嘗試了各種方式分裂「|」無需轉義或將其添加到集合,但始終是相同的結果。我知道我以前曾在管道上分裂過,但似乎我必須逃脫或添加到一組以獲得正確的結果。

回答

2

管道(|)是一種保存正則表達式符號(允許正則表達式組件在邏輯上OR -ed),但如果你想在其性質上下文中使用它,你要逃跑呢添加它到一組(用[]表示)。

逃逸例如:

System.out.println(foo.split("\\|")[1]); 

添加管的一組示例:

System.out.println(foo.split("[|]")[1]); 
+1

單個原子字符類是一種浪費,但。更好地去「逃生路」 – fge 2015-02-24 09:36:22

+0

我知道這兩種方法,我的問題是,如果有反正知道什麼時候有必要,因爲我已經用「|」作爲沒有問題的爭論並按預期工作(認爲這不是最好的做法,只是想了解什麼是不同的) – Vinc 2015-02-24 09:38:40

+0

'有什麼方法可以知道他們什麼時候需要嗎?如果你想'''用作一個字符,而不是一個正則表達符號,那麼你必須逃避。知道是否需要轉義取決於你的目的。 – 2015-02-24 09:41:04

2

嘗試逸出管作爲分割方法採用正則表達式作爲輸入和「|」(管)具有特殊的意義在它,所以使用它像:

String foo = "Hello|World"; 
System.out.println(foo.split("\\|")[1]); 
Output: 
World 
0

你需要一個分隔符(「\」)使用特殊字符| 。

String foo = "Hello|World"; 
System.out.println(foo.split("\\|")[1]); 
0

你需要轉義每個在正則表達式中有特殊意義的字符。爲了讓所有的特殊字符列表必須在Java API for the Pattern class

看看例如:.

- special meaning in the regex, it matched "Any character" 
- if you want to disable this special meaning you have to escape it as `\.` 
- as the backslash itself has also a special meaning you need to escape it as well, 
    that's why the regex must be specified as `\\.` 
相關問題