Java 将字符串解析为哈希集

Java 将字符串解析为哈希集,java,Java,目前,我的应用程序一直挂断在我创建的一个方法上,该方法将字符串(而不是字符串[])解析为一个集合 private Set<String> parseTopicString(String str) { Set<String> res = new HashSet<String>(); String currentStr = str; while (currentStr.split("\\{").length >= 2) {

目前,我的应用程序一直挂断在我创建的一个方法上,该方法将字符串(而不是字符串[])解析为一个集合

  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;
  }
如何优化parseTopicString()方法?

此方法获取哈希集并将其值转换为长字符串,例如{string1}{string2}{string3}。。。依此类推,取决于在任何给定时间集合中有多少项

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

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

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

在调试器中逐步执行并观察
currentStr
[1]如果异常正在终止线程,请将所有代码包装在try/catch(Throwable)中,并将异常打印到您可以看到的地方。[2]隔离有问题的输入数据,并在使用调试器逐步执行时运行该数据[3]如果程序真的挂起(死锁/活锁或无限循环),然后获取堆栈跟踪线程转储,并准确确定锁定它的方法和代码行。什么是
prefs
?它是安卓
SharedReferences
对象吗?如果是,为什么不能使用
putStringSet
?调用
split
这么多次可能是导致速度缓慢的一个重要因素。(最终创建O(N^2)字符串并丢弃它们)
Set<String> result = new HashSet<>(Arrays.asList(
    string.substring(1, string.length() - 1).split("\\}\\{")));