2010-09-13 44 views
1

我有這種形式的字符串:字符串具有解析特殊字符

String buf = "[[[name11,name12]][[name21,name22]][[name31,name32]]]"; 

我怎樣才能檢索到所有的名字?

當我從數據庫中檢索數據時,我以這種形式收回數據。

尋找Java解決方案。

感謝

+3

你爲什麼需要解析這樣的字符串?它看起來像來自多維數組的某種'toString()'方法,在這種情況下,我建議使用它來代替它的字符串表示。您可能還想提及您正在使用的編程語言。 – 2010-09-13 13:35:45

+1

我看到你補充說它來自數據庫。那麼,我不會建議一個* hacky *'String.split(...)'方法(我相信有人會在幾分鐘內...),但我建議將這些信息正確地存儲在數據庫中,而不是黑客繞過它。假設有人提出了一個'split(...)'解決方案,當你的一個名字包含一個'['''''''''''文字時,你會怎麼想呢? – 2010-09-13 13:45:24

+0

該名稱不包含任何特殊字符,它只是一個字母或數字。所以即使有人使用String.split(「\\\ [」)或其他東西)也沒關係。 – jimmy 2010-09-13 13:48:25

回答

2

這招應該這樣做:

String csv = buf.replace("[[[","").replace("]]]","").replace("]][[",","); 
String[] names = csv.split(","); 

它消除了開頭和結尾的括號並用逗號取代了內部支架。現在,您可以將輸入拆分爲,,並且只有名稱的數組。

+0

String csv = buf.replace(「[」,「」)。replace(「]」,「」)// simpler? – 2010-09-13 16:41:10

+0

String [] names = buf.split(「[,[\\\]] +」); //更簡單但不確定逃跑? – 2010-09-13 16:41:51

+0

@Tom,no,'buf.replace(「[」,「」)。replace(「]」,「」)'不起作用:它將name12和name21粘合在一起名字也是如此)。 – 2010-09-15 07:08:44

0

可以使用Scanner類在Java中分析數據。

0

你是否總是有成對的名字?是否有可能[[name2,]]?

如果姓名總是成對出現,那麼Andreas_D的回答是一個簡單直接的答案。如果其中一個名稱可能丟失,那麼您需要在前面添加一對replace()調用來查找這些值並將虛擬值放入。具體來說,「[,」帶有「[dummyFirst,」和「,]」,並帶有「 ,dummyLast]」。然後,您必須根據適合您的上下文的任何規則來處理這些虛擬值。