如何在Java中将包含多组字符串的字符串拆分为多组集合

如何在Java中将包含多组字符串的字符串拆分为多组集合,java,string,Java,String,我有一个包含多组字符串的字符串,每个组都用括号{}包装。每个组用逗号分隔,每个带组的字符串也用逗号分隔。格式类似于: {abc, def}, {006, xy, 036}, {......} set 1: abc def set 2: 006 xy 036 ..... set n: allSets --> set1, set2, set...., setn. 我想做的是将每个组放入一个H

我有一个包含多组字符串的字符串,每个组都用括号{}包装。每个组用逗号分隔,每个带组的字符串也用逗号分隔。格式类似于:

  {abc,  def}, {006,  xy,  036}, {......}
  set 1:  abc
          def

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

  allSets --> set1, set2, set...., setn.
我想做的是将每个组放入一个HashSet,另一个HashSet包含所有这些集合,类似于:

  {abc,  def}, {006,  xy,  036}, {......}
  set 1:  abc
          def

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

  allSets --> set1, set2, set...., setn.
我现在能想到的是迭代原始字符串中的每个字符,并将其添加到集合中。但我想知道是否还有其他方法可以做到这一点,或者Java是否有一些API可以实现这一点。非常感谢

    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

现在,您可以继续并将其相应地添加到字符串数组或映射中,这是一种黑客行为

它会给你这样的价值观

abc,def
006,xy,036


现在,您可以继续将其添加到字符串数组或映射中,这是一个技巧。

您正在寻找一个简单的解析器。但是,用通常的方法把它拼凑起来可能比写一个更容易。@mszymborski你能更清楚地解释一下“用通常的方法把它拼凑起来而不是写一个”吗?通常的方法是什么?您可以编写一个整洁的流来切割、修剪、删除所有不必要的位。以后需要修改的工作很多,而且很麻烦,但仍然比学习antlr简单。@mszymborski我没有用于stream的Java 1.8…..我刚刚完成了对它的裁剪:(您正在寻找一个简单的解析器。但是,用通常的方法破解它可能比编写一个更容易。@mszymborski您能更清楚地了解它吗“用通常的方法来修改它,而不是编写一个”?通常的方法是什么?你可以编写一个整洁的流来切割、修剪、删除所有不必要的部分。以后要修改会有很多工作和麻烦,但仍然比学习antlr简单。@mszymborski我没有Java 1.8用于流…我刚刚完成了切割:(您可以使用惰性正则表达式,而不是使用
[^}]
东西,您将在哪里使用它?
*
通常匹配尽可能多的标记-如果您使用
*?
它将匹配尽可能少的标记(但如果有匹配的标记,仍然会找到匹配)-例如
\{(.*?\\\}
您可以使用惰性正则表达式,而不是使用
[^}]
您将在哪里使用它?
*
通常匹配尽可能多的标记-如果您使用
*?
它将匹配尽可能少的标记(但如果有匹配项,仍然会找到匹配项)-例如
\{(.*?\\\}