Мне нужно получить счет каждого повторного персонажа отдельно.... Я пробовал... но он возвращает только счет уникального количества символов...
Вход:
SSDDVVDSSS
вывод:
S - 5
D - 3
V - 2
вот мой код
public class q2 {
public static void main(String[] args) {
System.out.println(countUniqueCharacters("SSDDVVDSSS"));
}
public static int countUniqueCharacters(String input) {
boolean[] isItThere = new boolean[Character.MAX_VALUE];
for (int i = 0; i < input.length(); i++) {
isItThere[input.charAt(i)] = true;
}
int count = 0;
for (int i = 0; i < isItThere.length; i++) {
if (isItThere[i] == true){
count++;
}
}
return count;
}
}
Ниже перечислены проблемы в вашем коде:
Существует несколько способов решения этой проблемы:
Используя массив int с индексом от 0 до 26, который поддерживает подсчет символа AZ и, наконец, вы печатаете счетчик:
public static void main(String[] args) {
int[] counts = countUniqueCharacters("SSDDVVDSSS");
for (int i = 0; i < counts.length; i++) {
if (counts[i] != 0) {
System.out.println("char " + ((char) ('A' + i)) + " repeated " + counts[i] + " times");
}
}
}
public static int[] countUniqueCharacters(String input) {
int[] counts = new int[26];
for (int i = 0; i < input.length(); i++) {
counts[input.charAt(i) - 'A']++;
}
return counts;
}
Другой способ - использовать карту с символом в качестве ключа и int как значение, которое будет представлять собой счетчик повторения этого символа.
Ваш последний цикл 'for' перебирает массив счетчиков и подсчитывает количество записей с истинным значением, которое оно содержит. Поэтому вы получаете количество уникальных символов.
Попробуй это:
public class q2 {
public static void main(String[] args) {
countUniqueCharacters("SSDDVVDSSS");
}
public static void countUniqueCharacters(String input) {
Map<Character,Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < input.length(); i++){
if (map.get(input.charAt(i)) == null){
map.put(input.charAt(i),1);
}
else{
map.put(input.charAt(i),map.get(input.charAt(i))+1);
}
}
System.out.print(map);
}
}
public static void main(String[] args) {
String str = "SSDDVVDSSS";
int counts[] = new int[(int) Character.MAX_VALUE];
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
counts[(int) c]++;
}
for (int i = 0; i < counts.length; i++) {
if (counts[i] > 0)
System.out.print((char) i + "-" + counts[i] + "\n");
}
}