私は最初にこの種のことをしていました:
List<String> items = new ArrayList<String>();
Comparator<items> ignoreLeadingThe = new Comparator<items>() {
public int compare(String a, String b) {
a = a.replaceAll("(?i(^the\\s+", "");
b = b.replaceAll("(?i(^the\\s+", "");
return a.compareToIgnoreCase(b);
}
};
Collections.sort(items, ignoreLeadingThe);
今私はこれをやっています:
ItemObject[] io = new ItemObject[items.size()];
Comparator<ItemObject> ignoreLeadingThe = new Comparator<ItemObject>() {
public int compare(ItemObject a, ItemObject b) {
a.name = a.name.replaceAll("(?i(^the\\s+", "");
b.name = b.name.replaceAll("(?i(^the\\s+", "");
return a.name.compareToIgnoreCase(b.name);
}
};
Arrays.sort(io, ignoreLeadingThe);
私がArrayList
上を並べ替えていたとき、それは通常通りに機能しました。「The」を無視し、それに応じてリストを並べ替えました。しかし、それは実際にはリストの出力に影響を与えていませんでした。
ただし、通常のコードArray
(文字列ではなくオブジェクトで埋められている)を並べ替えるときの一番下のコードでは、実際には「The」を削除します。たとえば、「TheJoker」は「Joker」になります。
誰かがここで何が悪いのかわかりますか?