Массив символов, проверка на одинаковые элементы
Как вывести повторяющиеся буквы аа bbb
char text []={'a','a','b','b','b','d','e','f'};
for(int i = 0; i < text.length; i++) {
if (text[i] == text[i]) {
System.out.println(text[i]);
}
}
Ответы (3 шт):
Автор решения: Алексей Шиманский
→ Ссылка
На каждой итерации сравнивать текущий символ со следующим и предыдущим.
- Если следующий точно такой же, то выводить его через
print, если нет, то: - Посмотреть предыдущий. Если такой же, то выводить его через
print, если нет, то вывести пробельный символ - Не забываем проверять границы начала и конца массива, чтобы при проверке на предыдущий или следующий элемент не цепануть ошибку
ArrayIndexOutOfBoundsException
Автор решения: Павел Ериков
→ Ссылка
Вот простой пример функции с комментариями:
public static void main(String[] args) {
char text []={'a','a','b','b','b','d','e','f'};
//Счетчик сколько раз повторялась буква
//это чтобы не выводить d, e и т.д.
int count = 0;
//Пройдемся по всей строке сравнивая i-ый символ
//с i - 1. Вот по этому мы начинаем с i = 1
for(int i = 1; i < text.length; i++){
//Если рядом стоящие символы совподают
//то выводим букву и увеличиваем счетчик
if(text[i - 1] == text[i]){
System.out.print(text[i]);
count++;
}
//Если рядом стоящие символы не совподают
//и count >= 1 выводим последнюю букву
//и обнуляем счетчик
else if(count >= 1){
System.out.print(text[i - 1] + " ");
count = 0;
}
}
//Если конец строки был из повторяющих букв
//то count будет >= 1
if(count >= 1)
System.out.print(text[text.length - 1] + " ");
}
Автор решения: kami
→ Ссылка
Если порядок символов может быть произвольным, стоит заняться подсчетом их количества:
Character text[]={'a','a','b','b','b','d','e','f'};
Map<Character, Integer> charMap = new HashMap<>();
for (Character c: text){ // проходим по всему массиву
// есть смутное подозрение, что это тоже можно сделать через stream, но...
if (!charMap.containsKey(c)) {
charMap.put(c, 0);
}
charMap.put(c, charMap.get(c)+1); // подсчитываем количество символов
}
List<String> values = charMap.entrySet().stream()
.filter(e->e.getValue()>1) // оставляем только повторяющиеся символы
.sorted(Comparator.comparing(Map.Entry::getKey)) // сортируем по алфавиту
.map(e-> e.getKey().toString().repeat(e.getValue())) // вместо количества - повторяем символ сколько требуется
.collect(Collectors.toList()); // и преобразуем в List
System.out.println(values);