logo

В Java: определение буквы или цифры в строке без regex

Быстрый ответ

Если необходимо выяснить, является ли символ в Java буквой или числом без применения регулярных выражений, можно воспользоваться методами Character.isLetter(char) и Character.isDigit(char):

Java
Скопировать код
boolean isLetter = Character.isLetter('A'); // true, 'A' – это буква
boolean isNumber = Character.isDigit('1'); // true, '1' – это цифра

Просто и понятно!

Юникод и Java

Java поддерживает Юникод, поэтому используемые символы не ограничены английской азбукой и могут включать буквы с диакритическими знаками и другие символы:

Java
Скопировать код
boolean isLetter = Character.isLetter('ñ'); // true, 'ñ' – определенно не цифра!

Для тех символов, которые могут одновременно быть и буквами, и цифрами, подходит Character.isLetterOrDigit:

Java
Скопировать код
boolean isLetterOrDigit = Character.isLetterOrDigit('8'); // true, это цифра

Проверка символов, специфичных для ASCII

Если ваша работа ограничивается символами ASCII, можно просто проверить символ на принадлежность к определенному диапазону:

Java
Скопировать код
char c = 'A';
boolean isASCIILetter = (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); // Это, несомненно, буква!

Остерегайтесь битовых операций, они могут привести к неожиданным ошибкам:

Java
Скопировать код
boolean isASCIILetter = ((c | 32) – 'a') < 26; // Недостаточно хороший вариант, если важна читаемость кода

Работа с Юникодом

При работе с символами Юникода необходимо учитывать различные блоки символов, что возможно благодаря Character.UnicodeBlock:

Java
Скопировать код
UnicodeBlock block = Character.UnicodeBlock.of('9'); // Вот такой FULLWIDTH_DIGIT

if (block.equals(UnicodeBlock.BASIC_LATIN)) {
    // Здесь применимы только ASCII символы
}

Такой подход будет полезен при локализации контента.

Визуализация

Рассматривайте символы как объекты на складе 🏭:

Java
Скопировать код
char c = getBoxFromWarehouse(); // Вот это поворот – новые данные! 📦

// Что же внутри?

if (Character.isLetter(c)) {
  // Это текстовый элемент 🔧
}

if (Character.isDigit(c)) {
  // Или просто числовой объект! 🧸
}

Логика здесь действительно проста, как выбор между просмотром Netflix и учебой 🏭✅!

Идем дальше

Также есть метод Character.isAlphabetic(char), который работает даже с буквами специальных алфавитов:

Java
Скопировать код
boolean isAlphabetic = Character.isAlphabetic('Ä'); // true, несмотря на наличие диакритического знака

Для выполнения специфических символьных операций полезен Apache Commons Lang с его утилитами, такими как CharUtils.isAscii:

Java
Скопировать код
boolean isAsciiLetter = CharUtils.isAsciiAlpha('B'); // true, как в американской идиоме "apple pie"

Вспомните о контексте: '5' – это цифра, но в шестнадцатеричном представлении 'G' становится частью числа.

Полезные материалы

  1. Character (Java Platform SE 7 ) — Официальное API Java 7 для класса Character.
  2. UAX #44: Unicode Character Database — Для тех, кто интересуется деталями Юникода.
  3. Lang – Home — Apache Commons Lang, для тех, кто глубоко занимается работой с символами.
  4. Effective Java, 3rd Edition — Быть умным это хорошо, но быть эффективным специалистом лучше.
  5. JDK 21 Documentation – Home — Следите за обновлениями через официальную документацию Java.