将字符串解析为HashSet

时间:2015-02-26 20:40:39

标签: java

目前我的应用程序一直挂在我创建的方法上,该方法将String(Not String [])解析为Set。

如何优化parseTopicString()方法?

此方法接受HashSet并将其值转换为长字符串,例如{string1} {string2} {string3} ...等等,具体取决于在任何给定时间Set中有多少项。

    private String genTopicString(Set<String> topicSet) {
    StringBuilder res = new StringBuilder();
    for (String str : topicSet) {
      res.append("{").append(str).append("}");
    }
    return res.toString();
  }

我相信这个方法有问题,它将String转换回Set。

  private Set<String> parseTopicString(String str) {
    Set<String> res = new HashSet<String>();
    String currentStr = str;
    while (currentStr.split("\\{").length >= 2) {
      String[] parts = currentStr.split("\\{");
      if (parts[0].split("\\}").length >= 2) {
        res.add(parts[0].split("\\}")[0]);
        currentStr = parts[0].split("\\}")[1];
      }
    }
    return res;
  }

这是应用程序挂起的地方

if (!(prefs.getString(CURRENT_TOPICS, "").isEmpty())) {
  currentTopics = parseTopicString(prefs.getString(CURRENT_TOPICS, ""));
  saveServiceTopics();
}

1 个答案:

答案 0 :(得分:1)

这不是最有效的,但至少它更容易理解:

Set<String> result = new HashSet<>(Arrays.asList(
    string.substring(1, string.length() - 1).split("\\}\\{")));