2015-02-26 3 views
-1

В настоящее время мое приложение продолжает зависеть от метода, который я создал, который анализирует String (Not String []) в Set.Разбор строки в HashSet

Как оптимизировать метод parseTopicString()?

Этот метод принимает HashSet и преобразует его значения в длинную строку, например {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(); 
    } 

Этот метод, я считаю, имеет проблему, он преобразует эту строку в набор.

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

шаг через в отладчик и посмотреть, что происходит с 'currentStr'. –

+0

[1] Если исключение убивает поток, оберните весь код в try/catch (Throwable) и распечатайте исключение где-нибудь там, где вы его увидите. [2] изолировать проблематичные входные данные и запускать эти данные во время прохождения через отладчик [3]. Если программа по-настоящему висит (тупиковая/живая или бесконечная петля), затем получите дамп потока трассировки стека и точно определите, какой метод и строка кода заблокирована. –

+0

Что такое 'prefs'? Это объект android 'SharedPreferences'? Если да, почему вы не можете использовать 'putStringSet'? –

ответ

1

Это не самый эффективный, но, по крайней мере, это легче понять:

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