最近、Java の String のcodePointAtメソッドに出くわしました。他にもいくつかのcodePointメソッドcodePointBefore
を見つけましcodePointCount
た。
今、いつ、どのようにcodePointAt
、同様の方法を使用する必要があるのだろうか.
最近、Java の String のcodePointAtメソッドに出くわしました。他にもいくつかのcodePointメソッドcodePointBefore
を見つけましcodePointCount
た。
今、いつ、どのようにcodePointAt
、同様の方法を使用する必要があるのだろうか.
簡単な答え:で指定されたインデックスから始まるUnicode コードポイントが得られますString
。つまり、その位置にある文字の「ユニコード番号」です。
より長い答え: Java が作成されたのは、16 ビット (別名 a char
) が存在する Unicode 文字を保持するのに十分だったときです (これらの部分は現在Basic Multilingual Plane または BMPとして知られています)。その後、コードポイントが 2 16より大きい文字を含むように Unicode が拡張されました。これは、 achar
がすべての可能な Unicode コードポイントを保持できなくなったことを意味します。
UTF-16が解決策でした。これは、「古い」Unicode コードポイントを 16 ビット (つまり、正確に 1 つchar
) に保存し、すべての新しいものを 32 ビット (つまり、2 つのchar
値) に保存します。これら 2 つの 16 ビット値は、「サロゲート ペア」と呼ばれます。厳密に言えば、 achar
は以前の「Unicode 文字」ではなく「UTF-16 コード単位」を保持するようになりました。
char
これで、「新しい」Unicode 文字をまったく使用しない (またはあまり気にしない) 限り、すべての「古い」メソッド (処理のみ) を問題なく使用できますが、新しい文字も (または単に完全な Unicode サポートが必要な場合)、実際にすべての可能な Unicode コードポイントをサポートする「コードポイント」バージョンを使用する必要があります。
注: BMP にない Unicode 文字の非常によく知られている例 (つまり、コードポイント バリアントを使用する場合にのみ機能する) は絵文字ですchar
。
コード ポイントは、Character.MAX_VALUE である 65535 を超える文字をサポートします。
このような文字数の多いテキストがある場合は、コード ポイントまたはs のint
代わりに作業する必要がありますchar
。
これは、1 つまたは 2 つの 16 ビット文字を使用してそれをint
私の知る限り、一般的に、これは、非繁体字中国語など、最近追加された補助多言語および補助漢字文字にのみ必要です。
要するに、Java でデフォルトの文字セットを使用している限りめったにありません :) しかし、より詳細な説明については、次の投稿を試してください。
文字をコードポイントと比較しますか? http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html http://javarevisited.blogspot.com/2012/01/java-string-codepoint-get-unicode .html
これがあなたのために物事を明確にするのに役立つことを願っています:)