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

Javaのバージョンは1.5です。

Comparatorを使用してソートを行っています。
ソートをシフトJISコード順とするため
下記のようなクラス、メソッドを作成しています。

public class ExmComparator implements Comparator<Object> {
public int compare(Object obj1, Object obj2) {
byte[] b1 = obj1.toString().getBytes("SJIS");
byte[] b2 = obj2.toString().getBytes("SJIS");
int len;
if (b1.length < b2.length) {
len = b1.length;
} else {
len = b2.length;
}
int s1h, s2h;
for (int i = 0; i < len; i++) {
s1h = b1[i];
s2h = b2[i];
if (!(s1h == s2h)) {
return s1h - s2h;
}
}
return b1.length - b2.length;
}
}
ソートするキー(名称+コード)が
"-0001","テレビ0002","電話0003","PC0004"の場合はシフトJISコードの昇順に
"-0001","PC0004","テレビ0002","電話0003"としたいのですが、
"テレビ0002","電話0003","-0001","PC0004"とソートされてしまいます。
半角ハイフンは名称がない場合の代替名称です。

シフトJISコードは
- :0x002d
P :0x0050
テ:0x30c6
電:0x9364
なのでこの通りにソートされるのではないかと思ったのですが、
2バイト文字はどうなんでしょうか…。

A 回答 (1件)

とりあえず getBytes で得られたバイト列を調べて「期待通りのソート順になるようなもの」かどうかを確認してみてはどうでしょう

か.
    • good
    • 0
この回答へのお礼

最初の段階で二バイト文字かどうかを判定して
そこからソートを行うようにしたところうまくいきました。

ご回答ありがとうございました。

お礼日時:2010/12/03 00:06

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