2016-07-25 68 views
0

我有一個包含多個字符串組的字符串,每個組都包含在括號{}中。每個組由逗號分隔,每個字符串與組之間也用逗號分隔。格式是這樣的:如何將包含多個字符串組的字符串拆分爲在Java中設置的集合

{abc, def}, {006, xy, 036}, {......} 

我想要做的就是把每個組到HashSet的,和其他的HashSet包含了所有這些集,這樣的:

set 1: abc 
      def 

    set 2: 006 
      xy 
      036 
    ..... 
    set n: 

    allSets --> set1, set2, set...., setn. 

我能想到的現在是迭代原始字符串中的每個字符並將其添加到集合中。但是我想知道是否有其他方法可以做到這一點,或者如果Java有一些可以實現這一點的API。非常感謝!

+0

您正在尋找一個簡單的解析器。但通常的方法比寫一個更容易。 – mszymborski

+0

@mszymborski你能更清楚地說明「以常規方式破解它,而不是寫一個」嗎?通常的方式是什麼? – jlp

+0

你可以編寫一個整潔的流來剪切,修剪,刪除所有不必要的位。很多工作和後期修改的麻煩,但仍然比學習antlr更簡單。 – mszymborski

回答

2
String str="{abc, def}, {006, xy, 036}"; 
    Pattern p = Pattern.compile("\\{(.*?)\\}"); 
    Matcher m = p.matcher(str); 
    while (m.find()) { 
     System.out.println(m.group(1)); 
    } 

它會給你的價值就像

ABC,DEF
006,XY,036

現在你可以繼續前進,因此將其添加到字符串數組或地圖,它是一個黑客。

+0

你可以使用懶惰的正則表達式而不是使用'[^}]' – mszymborski

+0

你在哪裏你將使用那個? –

+1

'*'通常儘可能匹配儘可能多的標記 - 如果使用'*?',它將盡可能少的標記匹配(但如果有的話,仍然會找到匹配) - 例如'\\ { (。*?)\\}' – mszymborski

相關問題