Java >> Java tutorial >  >> Tag >> char

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.


Java tag