Как проверить, что все символы в строке одинаковые?
Допустим есть массив стрингов. Как проверить, что какие-то строки в нём состоят только из одинаковых символов? Например "aaaa", "bbbbb","ccc"?
Пример:
String[] texts = new String[50_000];
text[0] = "aaa";
text[1] = "abcc";
text[2] = "ccccc";
text[3] = "bbbb";
text[4] = "cca";
Ответы (2 шт):
Для решения этой задачи можно написать функцию, которая будет проверять каждую строку на предмет того, состоит ли она только из одинаковых символов. Вот пример такой функции на языке Java:
public static boolean isSameCharacters(String s) {
if (s == null || s.length() == 0) {
return false;
}
char c = s.charAt(0);
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) != c) {
return false;
}
}
return true;
}
Эта функция принимает на вход строку s и проверяет, состоит ли она только из одинаковых символов. Если да, то функция возвращает true, иначе - false. Функция начинает проверку с первого символа строки s, сохраняет его в переменной c и сравнивает остальные символы с ним. Если какой-то символ отличается от c, то функция возвращает false. Если все символы одинаковые, то функция возвращает true.
Чтобы проверить все строки в массиве texts, можно пройтись по нему в цикле и вызвать функцию isSameCharacters() для каждой строки:
for (String s : texts) {
if (isSameCharacters(s)) {
System.out.println(s + " consists of same characters");
}
}
Этот код пройдется по всем строкам в массиве texts, вызовет функцию isSameCharacters() для каждой из них и напечатает те, которые состоят только из одинаковых символов.
Можно с применением метода String::matches и регулярного выражения, например: "(.)\\1*" множество символов после первого может быть пустым, т.е. будет возвращаться true для строки из одного символа:
public static boolean allSame(String str) {
return str != null && str.matches("(.)\\1*");
}
Если требуется, что после первого символа должен быть хотя бы один символ, регулярка меняется на "(.)\\1+".
Аналогичный однострочник с использованием Stream API:
public static boolean allSame(String str) {
return str != null && !str.isEmpty() && str.chars().allMatch(c -> str.charAt(0) == c);
}