[解決済み] Java文字列のユニコードコードポイントを繰り返し処理するにはどうすればよいですか?
2022-10-17 16:53:40
質問
ということは、私は
String#codePointAt(int)
でインデックス化されていますが
char
のオフセットでインデックス化され、コードポイントのオフセットではありません。
みたいなのをやってみようかなと思っています。
-
を使って
String#charAt(int)
を取得するためにchar
をインデックスで取得します。 -
をテストしています。
char
が 高サロゲート範囲-
であれば
String#codePointAt(int)
を使用してコードポイントを取得し、インデックスを 2 つ増やします。 -
でない場合は、与えられた
char
の値をコードポイントとして使用し、インデックスを 1 つインクリメントします。
-
であれば
しかし、私の懸念は
-
当然ながら高サロゲート範囲にあるコードポイントが、2つの
char
値として格納されるのか、それとも 1 つの - これは、文字を反復処理するための非常に高価な方法のように思えます。
- 誰かがもっと良いものを考え出したに違いない。
どのように解決するのですか?
はい、Java は文字列の内部表現に UTF-16 風のエンコーディングを使用します。また、基本多言語面 ( BMP ) の外側の文字をサロガシー方式でエンコードします。
BMP以外の文字を扱うことが分かっている場合、Java Stringの文字を反復処理する標準的な方法を紹介します。
final int length = s.length();
for (int offset = 0; offset < length; ) {
final int codepoint = s.codePointAt(offset);
// do something with the codepoint
offset += Character.charCount(codepoint);
}
関連
-
型に解決できない エラー解決
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SLF4J: クラス・パスに複数のSLF4Jバインディングが含まれています。
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
シェルコマンドやスクリプトのJavaコール
-
Javaがテキストファイルを読み込む
-
代入の左辺は変数でなければならない 解答
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
[解決済み] Javaで文字列の文字を反復処理する最も簡単/最も良い/最も正しい方法は何ですか?
-
[解決済み】javaで文字をASCIIの数値に変換する方法