1. Обзор
В этом уроке мы начнем с краткого рассмотрения некоторых общих типов категорий для каждой определенной кодовой точки Юникода или диапазона символов, чтобы понять разницу между буквами и буквенными символами .
Далее, мы рассмотрим isAlphabetic() и is Better() методы символьного класса в Java. Наконец, мы рассмотрим сходства и различия между этими методами.
2. Общие типы категорий символов Юникода
Набор символов Unicode (UCS) содержит 1 114 112 кодовых точек: U+0000—U+10FFFF. Символы и диапазоны кодовых точек сгруппированы по категориям.
Класс Character предоставляет две перегруженные версии метода GetType () , который возвращает значение, указывающее общий тип категории символа .
Давайте посмотрим на сигнатуру первого метода:
public static int getType(char ch)
Этот метод не может обрабатывать дополнительные символы. Для обработки всех символов Юникода, включая дополнительные символы, класс Java Character предоставляет перегруженный метод GetType , который имеет следующую сигнатуру:
public static int getType(int codePoint)
Далее давайте рассмотрим некоторые общие типы категорий.
2.1. UPPERCASE_LETTER
Тип UPPERCASE_LETTER общая категория представляет собой заглавные буквы.
Когда мы вызываем метод Character # |/GetType на букву верхнего регистра, например, ‘ U ‘, метод возвращает значение 1, которое эквивалентно значению перечисления UPPERCASE_LETTER :
assertEquals(Character.UPPERCASE_LETTER, Character.getType('U'));
2.2. LOWERCASE_LETTER
Тип категории LOWERCASE_LETTER general связан со строчными буквами.
При вызове метода Character # |/GetType на строчной букве, например, ‘ u ‘, метод вернет значение 2, которое совпадает со значением перечисления LOWERCASE_LETTER :
assertEquals(Character.LOWERCASE_LETTER, Character.getType('u'));
2.3. TITLECASE_LETTER
Далее, категория TITLECASE_LETTER general представляет символы регистра заголовка.
Некоторые символы выглядят как пары латинских букв. Когда мы вызываем метод Character # |/GetType для таких символов Юникода, это вернет значение 3, которое равно значению TITLECASE_LETTER enum:
assertEquals(Character.TITLECASE_LETTER, Character.getType('\u01f2'));
Здесь символ Юникода ” \u01f2 “представляет собой латинскую заглавную букву” D “, за которой следует маленькая ” Z ” с углеродом.
2.4. MODIFIER_LETTER
Буква модификатора в стандарте Unicode-это “буква или символ, обычно написанные рядом с другой буквой, которую он каким-либо образом изменяет”.
Тип MODIFIER_LETTER общая категория представляет такие буквы модификатора.
Например, буква модификатора small H , ‘ ʰ ‘ при передаче в Символ # GetType метод возвращает значение 4, которое совпадает со значением перечисления MODIFIER_LETTER :
assertEquals(Character.MODIFIER_LETTER, Character.getType('\u02b0'));
Символ Юникода ‘ \u020b ‘ представляет букву модификатора small H .
2.5. OTHER_LETTER
Тип категории OTHER_LETTER general представляет собой идеографию или букву в алфавите с одним регистром. Идеограмма-это графический символ, представляющий идею или концепцию, независимую от какого-либо конкретного языка.
В алфавите с одним регистром букв есть только один регистр. Например, иврит-это система письма в одном регистре.
Давайте рассмотрим пример еврейской буквы Alef, ‘ א ‘, когда мы передаем ее в метод Character # GetType , он возвращает значение 5, которое равно значению перечисления OTHER_LETTER :
assertEquals(Character.OTHER_LETTER, Character.getType('\u05d0'));
Символ Юникода ‘ \u05d0 ‘ представляет еврейскую букву Алеф.
2.6. LETTER_NUMBER
Наконец, категория LETTER_NUMBER связана с цифрами, состоящими из букв или буквоподобных символов.
Например, римские цифры относятся к категории LETTER_NUMBER general. Когда мы вызываем метод Character # |/GetType с римской цифрой пять, ‘Ⅴ’, он возвращает значение 10, которое равно значению enum LETTER_NUMBER :
assertEquals(Character.LETTER_NUMBER, Character.getType('\u2164'));
Символ Юникода ” \u2164 ” представляет собой римскую цифру Пять.
Далее давайте рассмотрим метод Character # is Alphabetic .
3. Символ#isAlphabetic
Во-первых, давайте посмотрим на сигнатуру метода isAlphabetic :
public static boolean isAlphabetic(int codePoint)
Это принимает кодовую точку Юникода в качестве входного параметра и возвращает true , если указанная кодовая точка Юникода является алфавитной и false в противном случае .
Символ является алфавитным, если его общий тип категории является одним из следующих:
- UPPERCASE_LETTER
- LOWERCASE_LETTER
- TITLECASE_LETTER
- MODIFIER_LETTER
- OTHER_LETTER
- LETTER_NUMBER
Кроме того, символ является алфавитным, если он имеет свойство Other_Alphabetic , как определено стандартом Unicode.
Давайте рассмотрим несколько примеров символов, которые являются алфавитами:
assertTrue(Character.isAlphabetic('A')); assertTrue(Character.isAlphabetic('\u01f2'));
В приведенных выше примерах мы передаем UPPERCASE_LETTER ‘A’ и TITLECASE_LETTER ‘\u01f2’ , который представляет латинскую заглавную букву ” D “, за которой следует маленькая ” Z ” с карон в метод isAlphabetic , и он возвращает true.
4. Символ#островок
Класс Character Java предоставляет метод isLetter() для определения того, является ли указанный символ буквой. Давайте посмотрим на сигнатуру метода:
public static boolean isLetter(char ch)
Он принимает символ в качестве входного параметра и возвращает true , если указанный символ является буквой, и false в противном случае .
Символ считается буквой, если его общий тип категории, заданный методом Character # GetType , является одним из следующих:
- UPPERCASE_LETTER
- LOWERCASE_LETTER
- TITLECASE_LETTER
- MODIFIER_LETTER
- OTHER_LETTER
Однако этот метод не может обрабатывать дополнительные символы. Для обработки всех символов Юникода, включая дополнительные символы, класс Java Character предоставляет перегруженную версию метода isLetter() :
public static boolean isLetter(int codePoint)
Этот метод может обрабатывать все символы Юникода, поскольку он принимает кодовую точку Юникода в качестве входного параметра. Кроме того, он возвращает true , если указанная кодовая точка Unicode является буквой, как мы определили ранее.
Давайте рассмотрим несколько примеров символов, которые являются буквами:
assertTrue(Character.isAlphabetic('a')); assertTrue(Character.isAlphabetic('\u02b0'));
В приведенных выше примерах мы вводим LOWERCASE_LETTER ‘a’ и MODIFIER_LETTER ‘\u02b0’ , который представляет букву модификатора small H в метод isLetter , и он возвращает true.
5. Сравнение и контраст
Наконец, мы видим, что все буквы являются буквенными символами, но не все буквенные символы являются буквами .
Другими словами, метод isAlphabetic возвращает true , если символ является буквой или имеет общую категорию LETTER_NUMBER . Кроме того, он также возвращает true , если символ имеет свойство Other_Alphabetic , определенное стандартом Unicode.
Во — первых, давайте рассмотрим пример символа, который является буквой, а также алфавитным символом ‘ a ‘:
assertTrue(Character.isLetter('a')); assertTrue(Character.isAlphabetic('a'));
Символ ‘ a ‘, переданный обоим методам Isalphabetic () , а также isAlphabetic() в качестве входного параметра, возвращает true .
Далее давайте рассмотрим пример символа, который является алфавитом, но не буквой. В этом случае мы будем использовать символ Юникода ‘ \u2164 ‘, который представляет собой римскую цифру Пять:
assertFalse(Character.isLetter('\u2164')); assertTrue(Character.isAlphabetic('\u2164'));
Символ Юникода ‘ \u2164 “когда перешли к Островок() метод возвращает значение false. С другой стороны, при переходе к isAlphabetic() метод, он возвращает истинный .
Конечно, для английского языка это различие не имеет никакого значения. Так как все буквы английского языка подпадают под категорию алфавитов. С другой стороны, некоторые символы в других языках могут иметь различие.
6. Заключение
В этой статье мы узнали о различных общих категориях кодовой точки Unicode. Кроме того, мы рассмотрели сходства и различия между методами isAlphabetic() и is Better () .
Как всегда, все эти примеры кода доступны на GitHub .