2016-07-25 69 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

相关问题