2014-10-06 58 views
0

我有一個字符串需要解析。Java解析 - 分隔符也可以是令牌的一部分

 M|N| | |"DANGER| AWESOME"|N|N| | | | 

分隔符是管道符號(|)。但是管道可以是令牌的一部分。在這種情況下,它用雙引號括起來。是否有我可以使用的現有庫/函數,可以指定分隔符或開/關定界符(|「和」|)。 StringTokenizer不起作用,因爲它會在DANGER |中計數管道真棒分隔符。我覺得必須有一個解決方案比單個字符檢查字符串/創建一個自定義分析器更加單調乏味。

回答

1

怎麼樣?

String regex = "\\|(?=([^\"]*\"[^\"]*\")*[^\"]*$)"; 

測試:

public static void main(String[] args) throws Exception { 
    String x = "M|N| | |\"DANGER| AWESOME\"|N|N| | | |"; 
    String regex = "\\|(?=([^\"]*\"[^\"]*\")*[^\"]*$)"; 
    String[] y = x.split(regex); 
    for(String s : y) { 
     System.out.println(s); 
    } 
    System.out.println("************* DONE ***********"); 
} 

輸出:

M 
N 


"DANGER| AWESOME" 
N 
N 



************* DONE *********** 
+0

謝謝!你能否用文字解釋(或指向一個破壞網站)正則表達式模式?我的正則表達式一直很可怕。 – headlikearock 2014-10-06 20:07:09

+0

我知道這個的唯一原因是因爲我詢問(使用逗號代替'|'作爲分隔符)。 [這裏是鏈接](http://stackoverflow.com/questions/20762375/need-a-breakdown-of-the-following-regular-expression) – gtgaxiola 2014-10-07 12:38:52