Нужно перебрать все символы строки и если оный отсутствует в результирующей строке - добавить его в неё. Вот что у меня получилось:
String wordsChangeNotRepeat = "";
for (char c : wordsChange.toCharArray()) {
if (!wordsChangeNotRepeat.contains(c)) //тут подчёркивает с
wordsChangeNotRepeat += c;
}
System.out.println(wordsChangeNotRepeat);
Измените
if (!wordsChangeNotRepeat.contains(c))
на
if (wordsChangeNotRepit.indexOf(c) == -1)
Вместо проверки каждый раз 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
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Возможно ли иметь несколько различных фрагментов изображений в одном SVG, или даже просто имитировать такой эффект с использованием особых...