



Взгляните на методы статических членов класса java.lang.Character (isDigit, isLetter, isLowerCase, ...)
Пример:
String str = "Hello World 123 !!";
int specials = 0, digits = 0, letters = 0, spaces = 0;
for (int i = 0; i < str.length(); ++i) {
char ch = str.charAt(i);
if (!Character.isDigit(ch) && !Character.isLetter(ch) && !Character.isSpace(ch)) {
++specials;
} else if (Character.isDigit(ch)) {
++digits;
} else if (Character.isSpace(ch)) {
++spaces;
} else {
++letters;
}
}
К сожалению, в Java Charset нет специальной функции, определяющей, содержит ли он специальные символы.
Использование регулярного выражения совершенно нормально, но вы можете сделать это и так:
fun Char.isSpecialChar() = toLowerCase() !in 'a'..'z' && !isDigit() && !isWhitespace()
fun CharSequence.containsSpecialChars() = any(Char::isSpecialChar)
'H'.isSpecialChar() // false
'&'.isSpecialChar() // true
"Hello World".containsSpecialChars() // false
"Hello & Goodbye".containsSpecialChars() // true
Это решение Kotlin, поэтому, если у вас есть Java Charset, может потребоваться преобразование.
Возможный дубликат Проверка того, является ли символ специальным символом в Java