デフォルトの Windows エクスプローラーのように、ファイルを正しい順序で名前順に並べ替える必要があります。
標準の Java String Comparator は、アルファベット値のみになるまでうまく機能します。名前に数字が含まれていると、正しく動作しません。たとえば、
「15 - abc.txt」という名前のファイルは、「2 - abc.txt」よりもリストの上位に表示されます。
多言語の場合にこの問題を解決する最善の方法は何ですか (java.text.Collator を使用する必要があります)。
2563 次
3 に答える
3
必要に応じて数値を考慮した独自のコンパレータを実装します。このコンパレータは、ファイル名をグループごとに分割する場合があります: 数字を他の文字とは別にします。
たとえば15-abc-32b.txt
、 array が生成され{"15", "abc", "32", "b"}
ます。このような配列の比較は簡単です。要素を調べて、 を使用して解析する必要がありますInteger.pareseInt()
。解析が成功した場合は適切な数値を比較し、そうでない場合は文字列を比較します。
于 2013-04-04T13:49:52.607 に答える
1
Java Comparator を使用し、ファイル名の整数フィールドと文字列フィールドを順番に別々に比較して、compare() メソッドを実装します。
于 2013-04-04T13:49:21.193 に答える
1
NumberFormat が "15-abc-32b.txt" を 15 として解析することを考慮すると (API を参照)、次のようにファイルを並べ替えることができます。
String[] files = new File("dir").list();
Arrays.sort(files, new Comparator<String>() {
NumberFormat f = NumberFormat.getInstance();
public int compare(String f1, String f2) {
try {
return Double.compare(f.parse(f1).longValue(), f.parse(f2).longValue());
} catch (ParseException e) {
throw new IllegalArgumentException(f1 + "|" + f2);
}
}
});
于 2013-04-04T14:04:25.700 に答える