Java 文字列内の Unicode コードポイントの反復
String#codePointAt() は、指定された文字オフセットで Unicode コードポイントを取得する効率的な方法を提供します。ただし、コードポイントを順番に反復処理しようとすると、開発者は課題に遭遇する可能性があります。
考えられるアプローチの 1 つは、String#charAt() を使用して文字を取得し、それらが上位サロゲート範囲内にあるかどうかを確認することです。上位サロゲートが検出された場合、String#codePointAt() を使用してコードポイントを取得し、インデックスを 2 ずつ増やすことができます。この範囲外の文字については、char 値を直接コードポイントとして扱うことができ、インデックスを増やすことができます。 by 1.
ただし、このアプローチでは、代理スキームを使用した基本多言語面 (BMP) 外の文字のエンコーディングに関する懸念が生じます。さらに、文字アクセス操作が繰り返されるため、計算オーバーヘッドが発生する可能性があります。
BMP を超える文字が含まれるシナリオの場合、Java は内部で Modified UTF-16 (UTF-16-esque) エンコーディングを利用します。 BMP の外部の文字は、2 つのサロゲート コード単位のシーケンスを使用して表現されます。このような場合にコードポイントを効率的に反復するために、開発者は次の標準的なアプローチを採用できます:
final int length = s.length(); for (int offset = 0; offset < length; ) { final int codepoint = s.codePointAt(offset); // perform operations on the codepoint offset += Character.charCount(codepoint); }
このアプローチは、コードポイントを順番に反復し、BMP 内の文字とサロガシー スキームを使用してエンコードされた文字を効果的に処理します。 codePointAt() と charCount() を使用することで、Java String でのコードポイントの効率的なトラバーサルのプロセスを最適化します。
以上がJava 文字列の Unicode コードポイントを効率的に反復処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。