- - PR -
String文字列のバイト単位の切り出し
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-01-17 00:39
String文字列のバイト単位の切り出しを行いたいと思っています。
下記、URLの質問でもあるようにsubstringでは文字単位なのでうまくいきません。 そこで下記URL中の助言で「一度バイト列にして、切り出した後に再度 String を 構築してくださいな。」とあるようにしたいと思います。 getBytes()で一度バイト列にすればいいのはわかるのですが 切り出した後に再度Stringに戻すにはどうすればよいのでしょうか。 例えば文字列の先頭から3バイト欲しくて、getBytes()で取得した配列から下記のように 3つの要素を取り出しました。 byte[0]+byte[1]+byte[2] この和を new String(byte[0]+byte[1]+byte[2],"JISAutoDetect") とやってStringに戻そうとしたのですがコンパイル時にエラーが出て 「精度が落ちている可能性」と出てしまいました。 byte[0]+byte[1]+byte[2]がいけないようです。 String化するためには切り出した要素をbyte型の配列に 直さなくてはいけないと思うのですがどのようにすればよろしいでしょうか? http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=12&topic=19279 |
|
投稿日時: 2007-01-17 00:46
new String(new byte[]{b[0],b[1],b[2]},"JISAutoDetect");です。
byte[]の各要素はbyte型です。 byte[] b = new byte[]{1,2,3,4,5,6};とあるときに、 b[0] + b[1] + b[2]は1 + 2 + 3となって6になります。 そもそもStringのコンストラクタにbyteを引数とするものなんてありません。 |
|
投稿日時: 2007-01-17 01:35
配列の切り出しには、以下のモノを覚えておくといいかもしれません。
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/System.html#arraycopy(java.lang.Object,%20int,%20java.lang.Object,%20int,%20int) |
|
投稿日時: 2007-01-17 10:13
なんで文字に再変換するのに一旦byte列にしないといけないのか
その背景が興味深いですが… 最初から文字単位で切り出してやればいいような気もしますが。 DBへの格納の際のバイト数制限みたいな話なのかな。 本質的にはかつのり氏がおっしゃるようにコンストラクタの 引数型が合っていないのが問題ですが (配列の扱いが苦手な人が多い気がする。JavaだとListとかを使うからかな?) エラーメッセージが「精度が落ちている可能性」と警告されるのは byte同士の演算の際に一旦intに暗黙に変換されて演算が行われるためでしょう。 # 本質に関係ないトリビアですいません |
1