こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

substring バイト単位でやりたい

Java初心者でちょっと困ったことがありまして・・・
文字列をバイト単位で切り取りたいのですが やり方がわかりません。
substringを使ってやろうとすると、
純粋に文字の単位で切り取ってしまいます。
bbb = "あいう"
#bbb.substring(1,2)# →"い"
bbb = "abc"
#bbb.substring(1,2)# → "b"

バイト単位で文字列の切り出しを行いたい場合
どのような方法で実現すればよいのか知恵をおかりしたいのですが
よろしくお願いいたします。

投稿日時 - 2002-11-22 14:53:21

QNo.410808

すぐに回答ほしいです

質問者が選んだベストアンサー

char単位でなく、byte単位で切り出したいのでしたら、
byte配列に変換してからやればOKです。

String a = "あいう";
String b = "abcdef";
//aの2バイト目から4バイト→"いう"
System.out.println(new String(a.getBytes(), 2, 4));

//bの2バイト目から4バイト→"cdef"
System.out.println(new String(b.getBytes(), 2, 4));

ただし、注意点があります。
String-byte配列の変換には、どの文字エンコーディングで
を使用するか指定する必要があります。
「EUC_JPのbyte配列に」とか「Shift_JISのbyte配列に」とかで意味が変わるからです。

上記の例のように文字エンコーディングを指定しない場合は、
システムのデフォルトの文字エンコーディングが使用されます。
システムのデフォルトを使用すると、実行環境によって結果が変わってきます。
同じ半角カタカナの"ア"でも、実行環境によって
1バイトだったり2バイトだったり3バイトだったりするので要注意です。

文字エンコーディングの指定の仕方は、こんな感じです。
a.getBytes("Shift_JIS") //StringをShift_JISのbyte配列に
new String(bytes, "Shift_JIS") //Shift_JISのbyte配列をStringに

詳しくはAPIリファレンスを見てください。

投稿日時 - 2002-11-22 19:49:52

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

文字コードを何にするかにもよりますが・・・。

String s = "文字";
int moji;
int ans;

moji = (int)s.charAt(2);
ans = Integer.toHexString(moji);

この例ですと、「文字」の2文字目「字」が「5b57」に変換されます。

見当違いでしたらごめんなさい。

投稿日時 - 2002-11-22 18:12:04

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-