2013-04-03 81 views
0

現在我有一個關於Java IO的任務,我需要逐行讀取文件並將這些數據保存到數據庫中,但現在我遇到了問題。以逗號分隔字符串,但在括號內不能逗號

"desk","12","15","(small,median,large)" 

我想用string.split(",")來分割,並將數據保存到每一列。但我發現()中的數據也被拆分了,我不想分裂(小,中位數,大),我想保持這個完整性。我怎樣才能做到這一點?我知道我可以使用regualr表達,但我真的不知道該怎麼做?

+2

你可能會更好使用CSV解析器比正則表達式。 – 2013-04-03 18:51:28

+0

使用[Java CSV Reader](https://www.google.com/search?q=java+csv+reader)。 – 2013-04-03 18:52:06

+0

繼'羅伯特哈維♦'的建議:見http://javacsv.sourceforge.net/com/csvreader/CsvReader.html – 2013-04-03 18:57:20

回答

0

或者,如果Java必須是:),則可以按「\\ s * \」\\ s *,\\ s * \「」分割並隨後添加「如果必要的話第一個字段的開始,並 第二結束時,我把\因爲我看到,你也有空格分隔符 - 15" 空白「(小

+0

如果一個字符串是「桌」,12,15,「(小,中位數,大)「,,」價格「可以幫助我找到拆分解決方案,謝謝.... – user1831190 2013-04-03 19:46:34

0

您可以通過使用PatternMatcher解決這個採用分體式的任何解決辦法只是看起來像一個骯髒的解決方法下面是一個例子:

public static void main(String[] args){ 
    String s = "\"desk\",\"12\",\"15\",\"(small,median,large)\""; 
    Pattern p = Pattern.compile("\".+?\""); 
    Matcher m = p.matcher(s); 
    List<String> matches = new ArrayList<String>(); 

    while (m.find()){ 
     matches.add(m.group()); 
    } 

    System.out.println(matches); 
} 
+0

我無法更改字符串...我可以做的是使用原始字符串。怎麼辦? – user1831190 2013-04-03 19:14:54

+0

您的原始字符串會很好,我只添加了轉義,因爲我在Java代碼中編譯了字符串。我的例子的String和你的是等價的。但是,如果您希望您可以編輯自己的帖子以顯示如何獲取該字符串,並且我可以編輯我的答案 – 2013-04-03 19:16:21

+0

608,7283,611,0,1,0,0,0,0,0,「3.3」,「模型「,」模型(CHILD,ADULT,PARTNER ...)「,0,0,」U「,2,0,0 ,,,」在描述下輸入新模型「,0,」DeskModel「,」 LMSyr部分操作「,」< None >「,50你可以看到有(CHILD,ADULT,PARTNER ...),當我拆分使用它時,它會拆分 – user1831190 2013-04-03 19:19:35

0
(\(.+?\)|\w+) 

上面的代碼與下面的結果匹配,這將允許更靈活的解決方案,其他一些發佈的解決方案。正則表達式的語法是在這個頁面上的其他答案只需使用這個正則表達式,而不是


(小,中位數,大)