プロが教えるわが家の防犯対策術!

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

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

A 回答 (2件)

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リファレンスを見てください。
    • good
    • 0

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



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

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

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

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

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

このQ&Aを見た人はこんなQ&Aも見ています