Проверка строки на ASCII символы в Java: эффективный метод
Быстрый ответ
Если строки, с которыми вы работаете, состоят только из символов ASCII, то использование метода String.matches()
в Java с подходящим регулярным выражением ^\\p{ASCII}*$
будет адекватным решением. Пример кода:
boolean isAscii(String input) {
return input.matches("^\\p{ASCII}*$");
}
Нужно передать строку в данную функцию isAscii
. Она вернёт значение true
, если строка содержит только символы ASCII, и значение false
, если встречаются не ASCII символы.
Использование цикла в проверке
Когда вы работаете с очень большими строками, использование цикла foreach может оказаться более эффективным решением по сравнению с регулярными выражениями:
boolean isPureAscii(String input) {
for (char c : input.toCharArray()) {
if (c > 127) {
return false;
}
}
return true;
}
Такой метод проверяет каждый символ в строке на принадлежность к диапазону ASCII, предполагая, что значение символа ASCII < 128.
Методы работы с кодировками
Если вы хорошо разбираетесь в кодировках, то подойдёт использование java.nio.charset.Charset
, который позволяет определить, соответствует ли строка стандарту ASCII.
boolean isAsciiEncoded(String input) {
CharsetEncoder encoder = Charset.forName("US-ASCII").newEncoder();
return encoder.canEncode(input);
}
Такой способ проверяет, может ли строка input
быть закодирована в кодировке US-ASCII.
Использование библиотеки Guava
Пользователи библиотеки Guava могут использовать метод CharMatcher.ascii()
для проверки:
boolean isOnlyAscii(String input) {
return CharMatcher.ascii().matchesAllOf(input);
}
CharMatcher.ascii()
вернёт true
, если строка состоит исключительно из символов ASCII, включая управляющие символы, такие как табуляция и перевод строки.
Особенности кодировки "ISO-8859-1"
Обратите внимание, что кодировка "ISO-8859-1" имеет больше символов, чем стандартный ASCII, поэтому не все её символы можно считать символами ASCII.
Визуализация
Рассмотрим ASCII как кассовый аппарат в магазине:
Входная строка: "Hello, World!"
Машина Проверки ASCII:
'🔎'.scan('Hello, World!') // Бип. Бип. Бип.
Результат:
Всё в порядке (🟢):
**В пакете только товары ASCII**
Непечатаемые символы ASCII
Следует учитывать, что область применения ASCII включает также непечатаемые символы — их коды лежат в диапазоне до U+007F. Их несложно пропустить при проверке, так как они могут быть незаметны.
Стандартный и расширенный ASCII
Расширенный диапазон символов ASCII шире стандартного (0-127). При проверке символов ASCII всегда следуйте диапазону 0-127.
Строки в формате UTF-16
Строки в Java представлены в формате UTF-16, и символы вне диапазона ASCII имеют значения больше 127. Обратите на это внимание, чтобы избежать ошибок в проверке.
Особенности обработки пустых строк
Будьте внимательны с пустыми строками и null
значениями — они могут вызвать NullPointerExceptions
или ошибки интерпретации данных. Всегда проводите предварительную валидацию.
Проверка через другое регулярное выражение
Если вы любите работать с регулярными выражениями и ищете альтернативы, попробуйте \\A\\p{ASCII}*\\z
. Это выражение гарантирует, что символы в начале и в конце строки соответствуют ASCII:
boolean isAsciiRegexAlt(String input) {
return input.matches("\\A\\p{ASCII}*\\z");
}
Полезные материалы
- String (Java Platform SE 7 ) — официальная документация Java API для класса String.
- Character (Java Platform SE 7 ) — информация о работе с Unicode и ASCII в Java.
- Pattern (Java Platform SE 7 ) — руководство по использованию регулярных выражений в Java.
- java – How to check if a String contains only ASCII? – Stack Overflow — обсуждение методов проверки строк на содержание символов ASCII в Java на Stack Overflow.
- Урок: Регулярные выражения (Учебники по Java. Важные классы Java) — уроки по использованию регулярных выражений для проверки ASCII от Oracle.
- ASCII – Википедия — история и особенности набора символов ASCII.