Проблема в том, что вы пытаетесь получить персонажа в позиции персонажа. Когда вы создаете переменную st
, это символ и он будет иметь длину 1; поэтому вы не можете получить charAt(index)
там. Кроме того, этот метод использования LinkedHashSet
не будет работать, поскольку при добавлении этих символов в LinkedHashSet
он не будет добавлять каждый символ более одного раза. Вместо этого вы хотите ArrayList
.
Возможно, это не самое эффективное решение, но оно достигнет того, что вы пытаетесь сделать с HashSet
String s = "mmamma";
List<Character> characterList = new ArrayList<>();
LinkedHashSet<Character> characterLinkedHashSet = new LinkedHashSet<>();
for(char c : s.toCharArray()) {
characterLinkedHashSet.add(c);
characterList.add(c);
}
for (Character character : characterLinkedHashSet) {
int frequency = Collections.frequency(characterList, character);
System.out.println("The frequency of char " + character + " is " + frequency);
}
Итак, что это делает, создает LinkedHashSet
, а также ArrayList
. ArrayList
хранит все символы в Collection
, а LinkedHashSet
хранит только один экземпляр каждого персонажа. Затем мы можем зациклить HashSet
и получить частоту внутри ArrayList