【问题标题】:How to split a String containing multiple groups of string into Sets of Set in Java如何将包含多组字符串的字符串拆分为Java中的Set
【发布时间】:2016-07-25 17:41:49
【问题描述】:

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

  {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 可以做到这一点。非常感谢!

【问题讨论】:

  • 您正在寻找一个简单的解析器。但用通常的方式破解它可能比写一个更容易。
  • @mszymborski 你能否更清楚地说明“用通常的方式破解这个而不是写一个”?通常的方式是什么?
  • 您可以编写一个整洁的流来剪切、修剪、删除所有不必要的位。大量的工作和后期修改的痛苦,但仍然比学习 antlr 更简单。
  • @mszymborski 我没有用于流的 Java 1.8 .....
  • 我刚刚把它切好:(

标签: java string


【解决方案1】:
    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,定义
006, xy, 036

现在您可以继续将它相应地添加到字符串数组或映射中,这是一个hack。

【讨论】:

  • 您可以使用惰性正则表达式而不是使用 [^}] 东西
  • 你会在哪里使用它?
  • * 通常匹配尽可能多的标记 - 如果您使用 *? 它将匹配尽可能少的标记(但如果有一个匹配,仍然会找到匹配项) - 例如 @987654325 @
猜你喜欢
  • 2021-04-05
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多