2016-04-27 10 views
3

java 8 String.chars()はIntStreamを返すので、charのストリームを必要とする場合は、i - >(char)iをキャストして見つけた方が良い答えです。これが正しく機能するかどうかは誰かが知っていますか?実際に8バイトを占めるU​​TF-16文字ですか?java 8 String.chars()は8バイトの文字で正常に動作しますか?

+1

8バイト?すべてのUnicode文字が最大で2つのUTF-16コード単位(つまり4バイト)に収まるとは限りませんか? – Thilo

答えて

1

あなたの定義に応じて:いいえ、そうではありません。

Java charは、16ビットのUTF-16コードユニットです。それより長いものは、2つのcharas "surrogate pairs")と表されます。

String#length()と同じです。 charの番号が返されますので、「長い文字」は2とカウントされます。

IntStreamが返される理由は、just to not need to introduce a CharStream classです。含まれているデータは、依然としてcharの16ビット範囲に収まるだけです。

しかし、(IntStreamとしても)32ビットUnicodeコードポイントを返していchars()に加えて、.codePoints()あります。

+0

右。しかし、あなたが言っていることは、intsを自分で解析する必要があるということですね。 – tumunu

+1

「解析する」とはどういう意味ですか? – Thilo

+0

"parse"とは、IntStreamの次のint値を見ると、その値が実際に同じcharの一部であるかどうかを調べる値を調べる必要があります。 – tumunu

関連する問題