Работа с двумерным массивом символов

Нужна помощь с заданием, есть массив:

char[][] tab = {
    {'S', 'a', 'm', 's', 'u', 'n', 'g'},
    {'N', 'o', 'k', 'i', 'a'},
    {'A', 'p', 'p', 'l', 'e'},
    {'B', 'l', 'a', 'c', 'k', 'B', 'e', 'r', 'r', 'y'},
    {'A', 'l', 'c', 'a', 't', 'e', 'l'},
    {'S', 'o', 'n', 'y'},
    {'J', 'o', 'l', 'l', 'a'},
};

Нужно проверить, повторяются ли в каждом отдельном названии хотя бы 2 буквы (вне зависимости от их регистра). Я написал такой цикл:

for (int i = 0; i < tab.length; i++){
    for (int j = 0; j < tab[i].length - 1; j++){
        if (tab[i][j] == tab[i][j+1]){
            System.out.println(tab[i][j] + " из " + i + " названия повторяются.");
        }
    }
}

Как результат получил:

  • p из 2 названия повторяются.
  • r из 3 названия повторяются.
  • l из 6 названия повторяются.

Как мне изменить мой код, чтобы учитывались буквы верхнего регистра?


Ответы (1 шт):

Автор решения: Anton Shchyrov

Перевести все в один регистр, а потом сравнивать.

Или банально

if (Character.toLowerCase(tab[i][j]) == Character.toLowerCase(tab[i][j+1])){

или с извращениями

for (int i = 0; i < tab.length; i++){
  if (tab[i].length >= 2) {
    char prev = Character.toLowerCase(tab[i][0]);
    for (int j = 1; j < tab[i].length; j++){
      char cur = Character.toLowerCase(tab[i][j]);
      if (prev == cur){
        System.out.println(cur + " из " + i + " названия повторяются.");
      }
      prev = cur;
    }
  }
}
→ Ссылка