dポイントプレゼントキャンペーン実施中!

25バイト以上ある文字配列を25バイトまでに切り取りたいのです。
全て半角英数ならstr.substring(0 ,25)ですみますが
日本語も入っているのでsubstringが使えません。
そこで,バイト配列を使おうと思ったのですがうまくいきません。どうかお願いします。
例)

String E = "AAAAAAAAAAAAAあああああああ";
byte S[] = new byte[100];
S=E.getBytes();
ByteArrayOutputStream out = new ByteArrayOutputStream();
for(int n = 0; n < 25 ; ++n){
out.write(S[n]);
}
System.out.println(out.toByteArray());

結果として"AAAAAAAAAAAAAあああ"が出力されてほしい

A 回答 (3件)

> System.out.println(out.toByteArray());


出力したいのはバイト配列そのものではなくて、バイト配列を文字列に変換したものでは?
→ System.out.println(new String(out.toByteArray()));

ところで、
"AAAAAAAAAAAAAあああああああ"
から 25 バイト切り取って
"AAAAAAAAAAAAAあああ"
になるのがよく分からないのですが……。
エンコーディングは何ですか?
文字列⇔バイト配列の変換ではエンコーディングを指定したほうが失敗がないと思います。

// 25 バイト目が文字と文字の間ではない場合はどうしますか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

//25 バイト目が文字と文字の間ではない場合はどうしますか
文字化けのままにしておきます。

お礼日時:2005/03/11 01:35

No1さんにもありますが、エンコード(もしくは対象OS)が分からないと何とも言えません。


例えば、Windowsのみをターゲットするのなら、MS932前提のコーディングとなりますが、同じソースをLinuxで動かしたら…。

さて、とりあえずWindows前提で回答しますと、No2さんの通り、最後をSystem.out.println(new String(out.toByteArray()));にすれば、結果として「AAAAAAAAAAAAAああああああ」が表示されます。
半角13文字、全角6文字(12バイト)で合計25バイトの文字列です。

しかし、もし運悪く半角Aが14文字あったらどうなるでしょうか?結果は「AAAAAAAAAAAAAAあああああ?」となります。この時にどういう仕様にしましょうか。

あと細かい部分ですが、byte S[] = new byte[100];でnewする必要はありません。次のS=E.getBytes();で参照が切れるので、すぐにgcの対象になります。
    • good
    • 0

受け取ったバイト配列から再びStringを作ったらいいのではないでしょうか?



String s = new String(out.toByteArray());

この回答への補足

ありがとうございます。
指摘されたように
String s = new String(out.toByteArray());

でStringの文字列に戻しました。

補足日時:2005/03/11 01:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!