Character#isAlphabeticvs.Character#isLetter
1. 概要
このチュートリアルでは、定義されたすべてのUnicodeコードポイントまたは文字範囲のいくつかの一般的なカテゴリタイプを簡単に調べて、文字と英字の違いを理解することから始めます。
さらに、 JavaのCharacterクラスのisAlphabetic()メソッドとisLetter()メソッドを見ていきます。 最後に、これらの方法の類似点と相違点について説明します。
2. Unicode文字の一般的なカテゴリタイプ
Unicode文字セット(UCS)には、1,114,112個のコードポイント(U + 0000〜U + 10FFFF)が含まれています。 文字とコードポイントの範囲は、カテゴリごとにグループ化されています。
Character クラスは、 getType()メソッドの2つのオーバーロードされたバージョンを提供し、文字の一般的なカテゴリタイプを示す値を返します。
最初のメソッドのシグネチャを見てみましょう。
public static int getType(char ch)
このメソッドは補足文字を処理できません。 補助文字を含むすべてのUnicode文字を処理するために、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 の一般的なカテゴリタイプは、小文字に関連付けられています。
Character # getType メソッドを小文字で呼び出すと、たとえば’ u ‘の場合、メソッドは値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 」の後に、キャロン付きの小さな「Z」を表します。
2.4. MODIFIER_LETTER
Unicode標準の修飾子文字は、「通常、何らかの方法で変更される別の文字の隣に書かれる文字または記号」です。
MODIFIER_LETTER 一般カテゴリタイプは、そのような修飾子文字を表します。
たとえば、修飾子文字small H 、’ʰ‘をCharacter # getType メソッドに渡すと、値4が返されます。これは、MODIFIER_LETTERの列挙値と同じです。
assertEquals(Character.MODIFIER_LETTER, Character.getType('\u02b0'));
Unicode文字’\ u020b ‘は、修飾子文字の小さいHを表します。
2.5. OTHER_LETTER
OTHER_LETTER の一般カテゴリタイプは、表意文字またはユニケースアルファベットの文字を表します。 表意文字は、特定の言語に関係なく、アイデアまたは概念を表すグラフィックシンボルです。
ユニケースアルファベットは、その文字の大文字と小文字が1つだけです。 たとえば、ヘブライ語はユニケースの書記体系です。
ヘブライ文字のAlef’א‘の例を見てみましょう。これをCharacter# getType メソッドに渡すと、5の値が返されます。 、これはOTHER_LETTERの列挙値と同じです。
assertEquals(Character.OTHER_LETTER, Character.getType('\u05d0'));
Unicode文字’\ u05d0 ‘は、ヘブライ語の文字Alefを表します。
2.6. LETTER_NUMBER
最後に、 LETTER_NUMBER カテゴリは、文字または文字様記号で構成される数字に関連付けられています。
たとえば、ローマ数字はLETTER_NUMBERの一般的なカテゴリに分類されます。 Character #getTypeメソッドをRomanNumeralFive’Ⅴ’で呼び出すと、列挙型LETTER_NUMBERの値と等しい値10が返されます。
assertEquals(Character.LETTER_NUMBER, Character.getType('\u2164'));
Unicode文字’\ u2164 ‘は、ローマ数字の5を表します。
次に、 Character #isAlphabeticメソッドを見てみましょう。
3. キャラクター# isAlphabetic
まず、isAlphabeticメソッドのシグネチャを見てみましょう。
public static boolean isAlphabetic(int codePoint)
これは、入力パラメータとしてUnicodeコードポイントを取り、は指定されたUnicodeコードポイントがアルファベットの場合はtrueを返し、それ以外の場合はfalseを返します。
一般的なカテゴリタイプが次のいずれかである場合、文字はアルファベットです。
- 大文字
- LOWERCASE_LETTER
- TITLECASE_LETTER
- MODIFIER_LETTER
- OTHER_LETTER
- LETTER_NUMBER
さらに、Unicode標準で定義されている貢献プロパティ Other_Alphabetic がある場合、その文字はアルファベットです。
アルファベットである文字のいくつかの例を見てみましょう。
assertTrue(Character.isAlphabetic('A'));
assertTrue(Character.isAlphabetic('\u01f2'));
上記の例では、ラテン語の大文字’Dを表すUPPERCASE_LETTER‘A’およびTITLECASE_LETTER’\u01f2′を渡します。 ‘の後にisAlphabeticメソッドへのキャロンが付いた小さな’Z ‘が続き、trueを返します。
4. キャラクター# isLetter
JavaのCharacterクラスは、指定された文字が文字であるかどうかを判別するための isLetter()メソッドを提供します。 メソッドのシグネチャを見てみましょう。
public static boolean isLetter(char ch)
入力パラメータとして文字を受け取り、は、指定された文字が文字の場合はtrueを返し、それ以外の場合はfalseを返します。
Character # getType メソッドによって提供される一般的なカテゴリタイプが次のいずれかである場合、その文字は文字と見なされます。
- 大文字
- 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′ を入力します。これは、小文字Hを表すisLetterメソッドとそれはtrueを返します。
5. 比較対照
最後に、すべての文字が英字であることがわかりますが、すべての英字が文字であるとは限りません。
つまり、 isAlphabetic メソッドは、文字が文字であるか、一般カテゴリ LETTER_NUMBER を持っている場合、trueを返します。 また、Unicode標準で定義されている Other_Alphabetic プロパティが文字にある場合は、trueも返します。
まず、文字とアルファベットである文字の例を見てみましょう—文字’ a ‘:
assertTrue(Character.isLetter('a'));
assertTrue(Character.isAlphabetic('a'));
文字’a ‘は、 isLetter()メソッドと isAlphabetic()メソッドの両方に入力パラメーターとして渡されると、trueを返します。 ]。
次に、アルファベットであるが文字ではない文字の例を見てみましょう。 この場合、ローマ数字の5を表すUnicode文字’ \u2164‘を使用します。
assertFalse(Character.isLetter('\u2164'));
assertTrue(Character.isAlphabetic('\u2164'));
Unicode文字’\ u2164 ‘をisLetter()メソッドに渡すと、falseが返されます。 一方、 isAlphabetic()メソッドに渡されると、trueが返されます。
確かに、英語の場合、区別は違いはありません。 英語のすべての文字がアルファベットのカテゴリに分類されるので。 一方、他の言語の一部の文字には区別がある場合があります。
6. 結論
この記事では、Unicodeコードポイントのさまざまな一般的なカテゴリについて学びました。 さらに、 isAlphabetic()メソッドと isLetter()メソッドの類似点と相違点についても説明しました。
いつものように、これらのコードサンプルはすべてGitHubで利用できます。