2

デフォルトの Windows エクスプローラーのように、ファイルを正しい順序で名前順に並べ替える必要があります。
標準の Java String Comparator は、アルファベット値のみになるまでうまく機能します。名前に数字が含まれていると、正しく動作しません。たとえば、
「15 - abc.txt」という名前のファイルは、「2 - abc.txt」よりもリストの上位に表示されます。
多言語の場合にこの問題を解決する最善の方法は何ですか (java.text.Collat​​or を使用する必要があります)。

4

3 に答える 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 に答える