2012-05-23 37 views
2

我有這個字符串的Java將字符串分割

G234101,Non-Essential,ATPases,Respiration chain complexes,"Auxotrophies, carbon and",PS00017,2,IONIC HOMEOSTASIS,mitochondria. 

,我一直在努力用Java分裂。該文件是逗號delimeted,但其中一些字符串中有逗號,我不希望它們分裂。目前在上面的例子中

"Auxotrophies, carbon and" 

被分成兩個字符串。

任何關於如何最好地用逗號分隔的建議。並非所有的琴絃有「」例如下面的字符串:

G234103,Essential,Protein Kinases,?,Cell cycle defects,PS00479,2,CELLULAR COMMUNICATION/SIGNAL TRANSDUCTION,cytoplasm. 
+0

你應該決定使用正則表達式。 – Sajmon

+1

這就是使用字符編碼的原因。不要將它放在引號中,將逗號更改爲%2C之類的內容,然後解碼。 – Vetsin

+0

你能選擇一個不是逗號的分隔符嗎?像「|」 – nsfyn55

回答

2

http://opencsv.sourceforge.net/

但是,如果你真的需要推倒重來。(作業),您需要使用更復雜的正則表達式不僅僅是「what,ever」.split(「,」)。 It's not simple though.你可能會更好地創建自己的定製Lexer。 http://en.wikipedia.org/wiki/Lexical_analysis

這對你來說並不難。當你逐字處理你的文本時,你只需要跟蹤開始和結束引號,以決定何時忽略逗號以及何時對它們進行操作。

另請參閱StreamTokenizer對於內置的可配置詞庫 - 您應該能夠使用它來滿足您的要求。

+0

+1現有的CSV解析器是唯一合理的答案,除非它是:) –

1

我認爲這將是一個多步驟的過程。首先,從原始字符串中查找所有逗號的引號,並用{comma}之類的字符替換它。你可以用一些正則表達式來做這件事。然後在新字符串上,用逗號(,)分隔新字符串。然後遍歷你的列表,並用逗號符號{,}替換{逗號}。

+0

如果某個csv列中的文本包含文字'{comma}',那麼該怎麼辦?替換逗號實際上並不能解決問題,這可能會使問題變得不太可能,但這是一種破解。 – Chii