Получение уникальных символов строки

280
05 апреля 2017, 13:51

Нужно перебрать все символы строки и если оный отсутствует в результирующей строке - добавить его в неё. Вот что у меня получилось:

String wordsChangeNotRepeat = "";
for (char c : wordsChange.toCharArray()) {
    if (!wordsChangeNotRepeat.contains(c)) //тут подчёркивает с
        wordsChangeNotRepeat += c;
}
System.out.println(wordsChangeNotRepeat);
Answer 1

Измените

if (!wordsChangeNotRepeat.contains(c))

на

if (wordsChangeNotRepit.indexOf(c) == -1)
Answer 2

Вместо проверки каждый раз wordsChangeNotRepeat можно использовать HashSet:

StringBuilder sb = new StringBuilder();
Set<Character> set = new HashSet<>();
for (char c : str.toCharArray())
{
    if (!set.contains(c))
    {
        sb.append(c);
        set.add(c);
    }
}
String result = sb.toString();

На небольших строках разница заметна не будет, однако, например, на строке из 10 миллионов символов, диапазон charcode-ов которых составляет 1074, разница заметна:

indexOf: 1180ms
HashSet:   77ms

Так как итоговая строка получается достаточно короткая, то преимущества от использования StringBuilder вместо resultString += c в плане времени выполнения не наблюдается, однако в общем случае рекомендуется использовать для таких целей StringBuilder.

READ ALSO
Hibernate 5.2.9.Final terminate

Hibernate 5.2.9.Final terminate

После выполнения метода main программа не завершается

189
Множественные перспективы в одном SVG

Множественные перспективы в одном SVG

Возможно ли иметь несколько различных фрагментов изображений в одном SVG, или даже просто имитировать такой эффект с использованием особых...

222