Character#isAlphabetic與Character#isLetter
1.概述
在本教程中,我們將簡要介紹每個定義的Unicode代碼點或字符範圍的一些常規類別類型,以了解字母和字母字符之間的區別。
此外,我們將研究Java中**Character類的isAlphabetic()和isLetter()方法**。最後,我們將介紹這些方法之間的異同。
2. Unicode字符的常規類別類型
Unicode字符集(UCS)包含1,114,112個代碼點:U + 0000-U + 10FFFF。字符和代碼點範圍按類別分組。
Character類提供了getType()方法的兩個重載版本,該方法返回一個值,該值指示字符的常規類別類型。
讓我們看一下第一種方法的簽名:
public static int getType(char ch)
此方法不能處理補充字符。為了處理包括補充字符在內的所有Unicode字符,Java的Character類提供了具有以下簽名的重載getType方法:
public static int getType(int codePoint)
接下來,讓我們開始研究一些常規類別類型。
2.1。 UPPERCASE_LETTER
UPPERCASE_LETTER常規類別類型表示大寫字母。
當我們以大寫字母(例如' U ')調用Character # getType方法時,該方法返回值1,該值等於UPPERCASE_LETTER枚舉值:
assertEquals(Character.UPPERCASE_LETTER, Character.getType('U'));
2.2。 LOWERCASE_LETTER
LOWERCASE_LETTER常規類別類型與小寫字母關聯。
在小寫字母(例如' u ')上調用Character # getType方法時,該方法將返回值2,該值與LOWERCASE_LETTER的枚舉值相同:
assertEquals(Character.LOWERCASE_LETTER, Character.getType('u'));
2.3。 TITLECASE_LETTER
接下來, TITLECASE_LETTER常規類別表示標題大小寫字符。
有些字符看起來像成對的拉丁字母。當我們在此類Unicode字符上調用Character # getType方法時,它將返回值3,該值等於TITLECASE_LETTER枚舉值:
assertEquals(Character.TITLECASE_LETTER, Character.getType('\u01f2'));
此處,Unicode字符' \u01f2 '表示拉丁大寫字母' D ',後跟\u01f2的小寫字母' Z '。
2.4。 MODIFIER_LETTER
Unicode標準中的修飾詞是“通常以某種方式修飾的另一個字母旁邊寫的字母或符號”。
MODIFIER_LETTER常規類別類型表示此類修飾語字母。
例如,修飾語小H ,' ʰ ',當傳遞給Character # getType方法時,返回值4,該值與MODIFIER_LETTER的枚舉值MODIFIER_LETTER :
assertEquals(Character.MODIFIER_LETTER, Character.getType('\u02b0'));
Unicode字符' \u020b '表示修飾符小H
2.5。 OTHER_LETTER
OTHER_LETTER常規類別類型表示表意文字或單寫字母的字母。表意文字是表示一個概念或概念的圖形符號,與任何特定語言無關。
單寫字母的字母只有一種情況。例如,希伯來語是單寫書寫系統。
讓我們看一個希伯來字母Alef' א '的示例,當我們將其傳遞給Character # getType方法時,它返回值5,該值等於OTHER_LETTER的枚舉值:
assertEquals(Character.OTHER_LETTER, Character.getType('\u05d0'));
Unicode字符' \u05d0 '表示希伯來字母Alef。
2.6。 LETTER_NUMBER
最後, LETTER_NUMBER類別與由字母或類似字母的符號組成的數字相關聯。
例如,羅馬數字屬於LETTER_NUMBER常規類別。當我們使用羅馬數字5“Ⅴ”調用Character # getType方法時,它將返回值10,該值等於枚舉LETTER_NUMBER值:
assertEquals(Character.LETTER_NUMBER, Character.getType('\u2164'));
Unicode字符' \u2164 '代表羅馬數字5。
接下來,讓我們看一下Character # isAlphabetic方法。
3. Character isAlphabetic
首先,讓我們看一下isAlphabetic方法的簽名:
public static boolean isAlphabetic(int codePoint)
這將Unicode代碼點作為輸入參數,如果指定的Unicode代碼點為字母,則返回true否則返回false 。
如果字符的常規類別類型為以下任意一種,則該字符為字母:
-
UPPERCASE_LETTER -
LOWERCASE_LETTER -
TITLECASE_LETTER -
MODIFIER_LETTER -
OTHER_LETTER -
LETTER_NUMBER
此外,如果字符具有Other_Alphabetic屬性Other_Alphabetic ,則該字符為字母 如Unicode標準所定義。
讓我們看一些字母字符的例子:
assertTrue(Character.isAlphabetic('A'));
assertTrue(Character.isAlphabetic('\u01f2'));
在以上示例中,我們將UPPERCASE_LETTER 'A'和TITLECASE_LETTER '\u01f2'傳遞給isAlphabetic方法,該拉丁字母表示拉丁大寫字母' D ',後跟帶有小寫字母的小寫字母' Z ',並且返回true。
4. Character isLetter
Java的Character類提供了isLetter()方法來確定指定字符是否為字母。讓我們看一下方法簽名:
public static boolean isLetter(char ch)
它以字符作為輸入參數,如果指定的字符是字母,則返回true否則返回false 。
如果Character # getType方法提供的Character常規類別類型為以下任意一種,則認為該字符為字母:
-
UPPERCASE_LETTER -
LOWERCASE_LETTER -
TITLECASE_LETTER -
MODIFIER_LETTER -
OTHER_LETTER
但是,此方法不能處理補充字符。為了處理所有Unicode字符(包括補充字符),Java的Character類提供了isLetter()方法的重載版本:
public static boolean isLetter(int codePoint)
此方法可以處理所有Unicode字符,因為它將Unicode代碼點作為輸入參數。此外,如果指定的Unicode代碼點是我們前面定義的字母,則返回true 。
讓我們看幾個字母字符的例子:
assertTrue(Character.isAlphabetic('a'));
assertTrue(Character.isAlphabetic('\u02b0'));
在上面的示例中,我們將LOWERCASE_LETTER 'a'和MODIFIER_LETTER '\u02b0'輸入到isLetter方法中,它們代表修飾符小H ,並返回true。
5.比較和對比
最後,我們可以看到所有字母都是字母字符,但並非所有字母字符都是字母。
換句話說,如果字符是字母或具有常規類別LETTER_NUMBER ,則isAlphabetic方法返回true 。此外,如果字符具有Unicode標准定義的Other_Alphabetic屬性,則它也返回true 。
首先,讓我們看一個既是字母又是字母的字符示例-字符' a ':
assertTrue(Character.isLetter('a'));
assertTrue(Character.isAlphabetic('a'));
當字符' a '作為輸入參數傳遞給isLetter()和isAlphabetic()方法時,將返回true 。
接下來,讓我們看一個字母字符而不是字母的示例。在這種情況下,我們將使用Unicode字符' \u2164 ',它代表羅馬數字5:
assertFalse(Character.isLetter('\u2164'));
assertTrue(Character.isAlphabetic('\u2164'));
傳遞給isLetter()方法的Unicode字符' \u2164 '返回false。另一方面,當傳遞給isAlphabetic()方法時,它返回true 。
當然,對於英語來說,區別沒有區別。由於所有英語字母都屬於字母類別。另一方面,其他語言中的某些字符可能會有區別。
六,結論
在本文中,我們了解了Unicode代碼點的不同常規類別。此外,我們介紹了isAlphabetic()和isLetter()方法之間的isAlphabetic() 。