Character#erAlphabetic vs Character#isLetter
1. Oversigt
I denne øvelse starter vi kort med at gennemgå nogle generelle kategorityper for hvert defineret Unicode-kodepunkt eller tegninterval for at forstå forskellen mellem bogstaver og alfabetiske tegn .
Yderligere vi ser på isAlphabetic() og isLetter() metoder for Karakteren klasse i Java. Til sidst vil vi dække lighederne og forskellene mellem disse metoder.
2. Generelle kategorityper af Unicode-tegn
Unicode Character Set (UCS) indeholder 1.114.112 kodepunkter:U+0000—U+10FFFF. Tegn og kodepunktsområder er grupperet efter kategorier.
Karakteren klasse giver to overbelastede versioner af getType() metode, der returnerer en værdi, der angiver karakterens generelle kategoritype .
Lad os se på signaturen af den første metode:
public static int getType(char ch)
Denne metode kan ikke håndtere supplerende tegn. For at håndtere alle Unicode-tegn, inklusive supplerende tegn, Javas tegn klasse giver en overbelastet getType metode, som har følgende signatur:
public static int getType(int codePoint)
Lad os derefter begynde at se på nogle generelle kategorityper.
2.1. UPPERCASE_LETTER
UPPERCASE_LETTER generel kategoritype repræsenterer store bogstaver.
Når vi kalder karakteren #getType metode på et stort bogstav, for eksempel "U ', returnerer metoden værdien 1, som svarer til UPPERCASE_LETTER enum værdi:
assertEquals(Character.UPPERCASE_LETTER, Character.getType('U'));
2.2. LOWERCASE_LETTER
LOWERCASE_LETTER generel kategoritype er forbundet med små bogstaver.
Når du kalder karakteren #getType metode på et lille bogstav, for eksempel 'u ', vil metoden returnere værdien 2, som er den samme som enum-værdien for LOWERCASE_LETTER :
assertEquals(Character.LOWERCASE_LETTER, Character.getType('u'));
2.3. TITLECASE_LETTER
Dernæst TITLECASE_LETTER generel kategori repræsenterer store og små bogstaver i overskriften.
Nogle tegn ligner par latinske bogstaver. Når vi kalder karakteren #getType metode på sådanne Unicode-tegn, vil dette returnere værdien 3, som er lig med TITLECASE_LETTER enum værdi:
assertEquals(Character.TITLECASE_LETTER, Character.getType('\u01f2'));
Her er Unicode-tegnet '\u01f2 ' repræsenterer det latinske store bogstav 'D ' efterfulgt af et lille 'Z ’ med en karon.
2.4. MODIFIER_LETTER
Et modifikationsbogstav i Unicode-standarden er "et bogstav eller symbol, der typisk er skrevet ved siden af et andet bogstav, som det ændrer på en eller anden måde".
MODIFIER_LETTER generel kategoritype repræsenterer sådanne modifikationsbogstaver.
For eksempel modifikatorbogstavet lille H , 'ʰ ', når den overføres til Karakter #getType metode returnerer værdien af 4, hvilket er det samme som enum-værdien for MODIFIER_LETTER :
assertEquals(Character.MODIFIER_LETTER, Character.getType('\u02b0'));
Unicode-tegnet "\u020b ' repræsenterer det lille H modifikatorbogstav .
2.5. OTHER_LETTER
OTHER_LETTER generel kategoritype repræsenterer en ideograf eller et bogstav i et unicase-alfabet. En ideograf er et grafisk symbol, der repræsenterer en idé eller et koncept, uafhængigt af et bestemt sprog.
Et unicase-alfabet har kun én store og små bogstaver for sine bogstaver. For eksempel er hebraisk et unicase-skriftsystem.
Lad os se på et eksempel på et hebraisk bogstav Alef, 'א ', når vi videregiver det til karakteren #getType metode, returnerer den værdien af 5, som er lig med enum-værdien af OTHER_LETTER :
assertEquals(Character.OTHER_LETTER, Character.getType('\u05d0'));
Unicode-tegnet '\u05d0 ’ repræsenterer det hebraiske bogstav Alef.
2.6. LETTER_NUMBER
Til sidst, LETTER_NUMBER kategori er forbundet med tal sammensat af bogstaver eller bogstavlignende symboler.
For eksempel kommer de romerske tal under LETTER_NUMBER generel kategori. Når vi kalder karakteren #getType metode med romertal fem, 'Ⅴ', returnerer den værdien 10, som er lig med enummet LETTER_NUMBER værdi:
assertEquals(Character.LETTER_NUMBER, Character.getType('\u2164'));
Unicode-tegnet '\u2164 ' repræsenterer romertallet fem.
Lad os derefter se på Karakteren #er Alfabetisk metode.
3. Karakter #er Alfabetisk
Lad os først se på signaturen for isAlphabetic metode:
public static boolean isAlphabetic(int codePoint)
Dette tager Unicode-kodepunktet som inputparameter og returnerer true hvis det angivne Unicode-kodepunkt er alfabetisk og falsk ellers .
Et tegn er alfabetisk, hvis dets generelle kategoritype er en af følgende:
- UPPERCASE_LETTER
- LOWERCASE_LETTER
- TITLECASE_LETTER
- MODIFIER_LETTER
- OTHER_BREV
- LETTER_NUMBER
Derudover er et tegn alfabetisk, hvis det har medvirkende egenskab Other_Alphabetic som defineret af Unicode-standarden.
Lad os se på et par eksempler på tegn, der er alfabeter:
assertTrue(Character.isAlphabetic('A'));
assertTrue(Character.isAlphabetic('\u01f2'));
I ovenstående eksempler videregiver vi UPPERCASE_LETTER 'A' og TITLECASE_LETTER '\u01f2' som repræsenterer det latinske store bogstav 'D ' efterfulgt af et lille 'Z ’ med en caron til isAlphabetic metode, og den returnerer sand.
4. Karakter #isLetter
Javas karakter klasse giver isLetter() metode til at bestemme, om et specificeret tegn er et bogstav. Lad os se på metodesignaturen:
public static boolean isLetter(char ch)
Det tager et tegn som inputparameter og returnerer sand hvis det angivne tegn er et bogstav og falsk ellers .
Et tegn anses for at være et bogstav, hvis dets generelle kategoritype, angivet af Tegn #getType metode, er en af følgende:
- UPPERCASE_LETTER
- LOWERCASE_LETTER
- TITLECASE_LETTER
- MODIFIER_LETTER
- OTHER_BREV
Denne metode kan dog ikke håndtere supplerende tegn. For at håndtere alle Unicode-tegn, inklusive supplerende tegn, Javas tegn klasse giver en overbelastet version af isLetter() metode:
public static boolean isLetter(int codePoint)
Denne metode kan håndtere alle Unicode-tegnene, da den tager et Unicode-kodepunkt som inputparameter. Desuden returnerer den sand hvis det angivne Unicode-kodepunkt er et bogstav, som vi definerede tidligere.
Lad os se på et par eksempler på tegn, der er bogstaver:
assertTrue(Character.isAlphabetic('a'));
assertTrue(Character.isAlphabetic('\u02b0'));
I ovenstående eksempler indtaster vi LOWERCASE_LETTER 'a' og MODIFIER_LETTER '\u02b0' som repræsenterer modifikationsbogstavet lille H til isLetter metode, og den returnerer sand.
5. Sammenlign og kontrast
Endelig kan vi se, at alle bogstaver er alfabetiske tegn, men ikke alle alfabetiske tegn er bogstaver .
Med andre ord er alfabetisk metode returnerer true hvis et tegn er et bogstav eller har den generelle kategori LETTER_NUMBER . Desuden returnerer den også sand hvis tegnet har Andet_alfabetisk egenskab defineret af Unicode-standarden.
Lad os først se på et eksempel på et tegn, der er et bogstav såvel som et alfabet — tegn 'a ‘:
assertTrue(Character.isLetter('a'));
assertTrue(Character.isAlphabetic('a'));
Tegnet 'a ', når den sendes til både isLetter() samt isAlphabetic() metoder som inputparameter, returnerer true .
Lad os derefter se på et eksempel på et tegn, der er et alfabet, men ikke et bogstav. I dette tilfælde bruger vi Unicode-tegnet '\u2164 ', som repræsenterer fem romertal:
assertFalse(Character.isLetter('\u2164'));
assertTrue(Character.isAlphabetic('\u2164'));
Unicode-tegnet "\u2164 ' når den sendes til isLetter() metode returnerer falsk. På den anden side, når den overføres til isAlphabetic() metode, returnerer den sand .
For det engelske sprog gør forskellen bestemt ingen forskel. Da alle bogstaverne i det engelske sprog kommer under kategorien alfabeter. På den anden side kan nogle tegn på andre sprog have en forskel.
6. Konklusion
I denne artikel lærte vi om de forskellige generelle kategorier af Unicode-kodepunktet. Desuden dækkede vi lighederne og forskellene mellem isAlphabetic() og isLetter() metoder.
Som altid er alle disse kodeeksempler tilgængelige på GitHub.