Как лучше всего без использования регулярных выражений определить, является ли символ буквой или цифрой в Java?
125
Каков наилучший и / или самый простой способ распознать, является ли string.charAt (index) буквой Az или числом в Java без использования регулярных выражений? Спасибо.
Character.isDigit(string.charAt(index))( JavaDoc ) вернет истину, если это цифра Character.isLetter(string.charAt(index))( JavaDoc ) вернет истину, если это буква
Я ищу функцию, которая проверяет, только ли это одна из латинских букв или десятичное число. Так char c = 255, что в печатной версии ├ и рассматривается в качестве письма Character.isLetter(c). Я думаю, что эта функция - то, что ищет большинство разработчиков:
privatestaticboolean isLetterOrDigit(char c){return(c >='a'&& c <='z')||(c >='A'&& c <='Z')||(c >='0'&& c <='9');}
Просто просмотрел наш код и был поражен, сколько ошибок там было из-за isLetter и isLetterOrDigit ... Спасибо!
fl0w 06
1
Каким-то образом вы перепутали свои наборы символов и / или отображаемые шрифты. Кодовая точка Unicode u00ff- это фактически символ ÿ. (Буква y в нижнем регистре с умляутом.) Код, представляющий, - u251c.
Stephen C,
@StephenC, ты прав. Я забыл, как я
набираю
На Котлине все намного прощеif (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
Влад
23
Как показывают ответы (если вы внимательно их изучите!), Ваш вопрос неоднозначен. Что вы подразумеваете под «буквой Az» или цифрой?
Если вы хотите знать , если символ является Unicode буква или цифра, а затем использовать Character.isLetterи Character.isDigitметоды.
Если вы хотите узнать, является ли символ буквой или цифрой ASCII , то лучше всего проверить, сравнив с диапазонами символов от «a» до «z», от «A» до «Z» и от «0» до '9'.
Обратите внимание, что все буквы / цифры ASCII являются буквами / цифрами Unicode ... но есть много букв / цифр Unicode, которые не являются ASCII. Например, буквы с ударением, кириллица, санскрит, ...
а затем проверьте, является ли блок одним из тех, которые вас интересуют. В некоторых случаях вам нужно будет проверить несколько блоков. Например, есть (как минимум) 4 кодовых блока для кириллических символов и 7 для латиницы. Character.UnicodeBlockКласс определяет статические константы для хорошо известных блоков; см. javadocs .
Обратите внимание, что любая кодовая точка будет находиться не более чем в одном блоке.
// check if ch is a letterif((ch >='a'&& ch <='z')||(ch >='A'&& ch <='Z'))// ...// check if ch is a digitif(ch >='0'&& ch <='9')// ...// check if ch is a whitespaceif((ch ==' ')||(ch =='\n')||(ch =='\t'))// ...
Предыдущий код неверен, потому что он работает только с английским и несколькими другими языками. Чтобы интернационализировать предыдущий пример, замените его следующими операторами: char ch; // ... // Этот код в порядке! if (Character.isLetter (ch)) // ... if (Character.isDigit (ch)) // ... if (Character.isSpaceChar (ch)) // ...
Яо Ли
- ясно спросил ОП if a string.charAt(index) is an A-z letter. Так мы ведь не говорим о других языках?
vadasambar
Например, в немецком языке ä можно рассматривать как находящееся в диапазоне аз.
Роберт
4
Сравните его ценность. Он должен быть между значениями «a» и «z», «A» и «Z», «0» и «9».
Этот ручной подход лучше встроенного Character.isLetter()?
Игорь Ганапольский
1
@IgorGanapolsky - Это зависит именно от того, что вы пытаетесь сделать. Подсказка: они делают разные вещи!
Stephen C
@StephenC Я думал, что Character.isLetter()это элементарно. Разве мы говорим об интернационализации?
Игорь Ганапольский
1
@IgorGanapolsky - Прочтите javadocs. Затем проверьте спецификации Unicode, какие кодовые точки действительно содержат соответствующие классы символов. >> Конечно << речь идет об интернационализации. Все символы в Java основаны на Юникоде.
Character.isLetterOrDigit(string.charAt(index))
для обеих проверок.Я ищу функцию, которая проверяет, только ли это одна из латинских букв или десятичное число. Так
char c = 255
, что в печатной версии ├ и рассматривается в качестве письмаCharacter.isLetter(c)
. Я думаю, что эта функция - то, что ищет большинство разработчиков:источник
u00ff
- это фактически символ ÿ. (Буква y в нижнем регистре с умляутом.) Код, представляющий, -u251c
.if (c in 'a'..'z' || с in 'A'..'Z' || c in '0'..'9')
Как показывают ответы (если вы внимательно их изучите!), Ваш вопрос неоднозначен. Что вы подразумеваете под «буквой Az» или цифрой?
Если вы хотите знать , если символ является Unicode буква или цифра, а затем использовать
Character.isLetter
иCharacter.isDigit
методы.Если вы хотите узнать, является ли символ буквой или цифрой ASCII , то лучше всего проверить, сравнив с диапазонами символов от «a» до «z», от «A» до «Z» и от «0» до '9'.
Обратите внимание, что все буквы / цифры ASCII являются буквами / цифрами Unicode ... но есть много букв / цифр Unicode, которые не являются ASCII. Например, буквы с ударением, кириллица, санскрит, ...
Общее решение - сделать это:
а затем проверьте, является ли блок одним из тех, которые вас интересуют. В некоторых случаях вам нужно будет проверить несколько блоков. Например, есть (как минимум) 4 кодовых блока для кириллических символов и 7 для латиницы.
Character.UnicodeBlock
Класс определяет статические константы для хорошо известных блоков; см. javadocs .Обратите внимание, что любая кодовая точка будет находиться не более чем в одном блоке.
источник
Класс символов Java имеет метод isLetterOrDigit, начиная с версии 1.0.2.
источник
Не знаю, как лучше, но мне это кажется довольно простым:
источник
Источник: https://docs.oracle.com/javase/tutorial/i18n/text/charintro.html
источник
if a string.charAt(index) is an A-z letter
. Так мы ведь не говорим о других языках?Сравните его ценность. Он должен быть между значениями «a» и «z», «A» и «Z», «0» и «9».
источник
Character.isLetter()
?Character.isLetter()
это элементарно. Разве мы говорим об интернационализации?Используйте приведенный ниже код
Character.isLetterOrDigit(string.charAt(index))
источник
источник