- PR -

String文字列のバイト単位の切り出し

1
投稿者投稿内容
しん
常連さん
会議室デビュー日: 2004/04/04
投稿数: 48
投稿日時: 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
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 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を引数とするものなんてありません。
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 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)
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-17 10:13
なんで文字に再変換するのに一旦byte列にしないといけないのか
その背景が興味深いですが…
最初から文字単位で切り出してやればいいような気もしますが。
DBへの格納の際のバイト数制限みたいな話なのかな。

本質的にはかつのり氏がおっしゃるようにコンストラクタの
引数型が合っていないのが問題ですが
(配列の扱いが苦手な人が多い気がする。JavaだとListとかを使うからかな?)
エラーメッセージが「精度が落ちている可能性」と警告されるのは
byte同士の演算の際に一旦intに暗黙に変換されて演算が行われるためでしょう。

# 本質に関係ないトリビアですいません
1

スキルアップ/キャリアアップ(JOB@IT)