目前我的应用程序一直挂在我创建的方法上,该方法将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();
}
答案 0 :(得分:1)
这不是最有效的,但至少它更容易理解:
Set<String> result = new HashSet<>(Arrays.asList(
string.substring(1, string.length() - 1).split("\\}\\{")));