4

コードポイントと改行で何かをする必要があります。charのコードポイントを取る関数があり、その場合は\r別の動作をする必要があります。私はこれを持っています:

if (codePoint == Character.codePointAt(new char[] {'\r'}, 0)) {

しかし、それは非常に醜く、正しい方法ではありません。これを行う正しい方法は何ですか?

13(数字(の10進識別子)をハードコーディングしてそれを使用できることは知ってい\rますが、それを行うと、何をしているのかが不明確になります...)

4

2 に答える 2

6

すべての入力が Basic Multilingual Plane (U+0000 から U+FFFF) にあることがわかっている場合は、次を使用できます。

char character = 'x';
int codePoint = character;

JLS 5.1.2 で指定されているように、からcharへの暗黙的な変換を使用します。int

プリミティブ型に対する 19 の特定の変換は、拡張プリミティブ変換と呼ばれます。

  • ...
  • charintlongfloatまたはdouble

...

char から整数型 T への拡大変換は、char 値の表現をゼロ拡張して、より広い形式を埋めます。

ただし、 acharは UTF-16 コード単位のみです。ポイントは、サロゲート ペア(2 つの UTF-16 コード単位が結合して 1 つの文字を構成するCharacter.codePointAt) で構成される、BMP の外側のコード ポイントに対応することです。

JLS 3.1から:

Unicode 標準は、当初、固定幅の 16 ビット文字エンコーディングとして設計されました。その後、表現に 16 ビット以上を必要とする文字を許可するように変更されました。有効なコード ポイントの範囲は、16 進数の U+n 表記を使用して U+0000 から U+10FFFF になりました。コード ポイントが U+FFFF より大きい文字は補助文字と呼ばれます。16 ビット単位のみを使用して文字の全範囲を表すために、Unicode 標準では UTF-16 と呼ばれるエンコードを定義しています。このエンコーディングでは、補助文字は 16 ビットのコード単位のペアとして表されます。最初は高サロゲート範囲 (U+D800 から U+DBFF) から、2 番目は低サロゲート範囲 (U+DC00 から U) からです。 +DFFF)。U+0000 から U+FFFF の範囲の文字の場合、コード ポイントの値と UTF-16 コード単位は同じです。

より複雑な状況に対処できるようにする必要がある場合は、より複雑なコードが必要になります。

于 2014-09-13T19:37:55.300 に答える