2011-11-11 69 views
2

我正在嘗試讀取文件,因此當我收到','逗號分隔符時,我將拆分這些字段。但是有些字段中有',',但它們被包含在雙引號內,因此我怎樣才能將它拆分爲,分隔符。 這裏是我做了什麼當使用String.split()拆分時轉義'''分隔符

String[] cols = line.split(Pattern.quote(",")); 

我應該如何只在Java修改此使用split()。如果分離器是管道'|',我還需要做些什麼改變?

回答

5

我回答了類似的問題here。第一個表達式,修改你的任務,會讀

,(?=([^"]*"[^"]*")*[^"]*$) 

這表達確保偶數引號跟隨它標識引用逗點。

+0

正則表達式的+1。我只想提一下,在遇到的每個逗號處,正則表達式引擎必須掃描文件的其餘部分以確定前面是否有引號數量,如果文件很大,這可能會造成巨大的開銷。 –

+0

hii我在你的代碼中試過你的正則表達式 String [] cols = line.split(Pattern.quote(「,(?=([^」] *「[^」] *「)* [^」] * $)它顯示我運算符*是未定義的參數類型(S)java.lang.String,java.lang.String ..我非常天真的正則表達式因此我不明白這意味着這意味着 – justin3250

+1

@ justin3250:要將正則表達式表示爲一個java字符串,您需要將引號,即'',(?=([^ \「] * \」[^ \「] * \」)* [^ \「] * $)「' – Jens

3

我不會嘗試使用這個正則表達式。正則表達式對此不太適合 - 雖然創建這樣一個正則表達式是可能的,但閱讀起來會很糟糕。

有很多開源的CSV解析器。只是一個quick search發現了很多項目 - 我會在寫你自己的之前看看那些項目。

0
String line="one|two,three"; 
    String cols[]= line.split("[,|\\|]"); 

類似上面的東西會根據和|

對於元字符|你必須用\ \我同意他人的意見來劃界;最好使用CSV解析器而不是重新創建它。