2013-05-13 51 views
6

我在我做了以下的情況:分割字符串人物性格

final String[] columns = row.split(delimiter.toString()); 

delimiter是一個字符。

當我需要根據選項卡提供\t作爲分隔符時,此工作正常。但是,當我想要在管道上進行拆分時,我傳遞了|的分隔符,並且這不能按預期工作。

我讀過幾篇關於如何|是一個特殊的字符,這意味着空或空,因此它會分裂遇到的每個字符,但是,我不希望這種行爲。

我可以做一個簡單的檢查,在我的代碼,這條管道的情況下,並圍繞這一問題得到:

if ("|".equals(delimiter.toString())) { 
    columns = row.split("\\" + delimiter.toString()); 
} 
else { 
    columns = row.split(delimiter.toString()); 
} 

但我不知道是否有一個更簡單的方法來解決這個問題。另外,是否還有其他需要考慮的特殊字符?|

回答

18

嘗試:

import java.util.regex.Pattern; 

... 

final String[] columns = row.split(Pattern.quote(delimiter.toString())); 

至於其他元字符,因爲他們是所謂的,這裏是從String Literals教程報價:

這個API還支持一些特殊的影響模式匹配方式的字符。

...

元字符通過這個API支持的是:<([{\^- = $ |!]})* +>

見:?

+0

謝謝,這工作完美。我會在11分鐘內接受。 – 2013-05-13 15:01:15

4
  1. 您可以使用StringUtils從阿帕奇共享郎裏面裝有方法接受純文本,而不是正則表達式:

    public static String[] split(String str, char separatorChar) 
    public static String[] split(String str, String separatorChars) 
    
  2. 您還可以使用StringTokenzier類,它不指望一個正則表達式分隔符。