Массив символов, проверка на одинаковые элементы

Как вывести повторяющиеся буквы аа 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);
→ Ссылка