2013-05-07 6 views
8

Ich möchte die Dateien nach ihrem ABS-Pfadnamen sortiert werden, aber ich möchte den Kleinbuchstaben vor dem Großbuchstaben sortiert werden. Beispiel: Nehmen wir an, ich habe 4 Dateien:Java, wie Kleinbuchstaben vor Großbuchstabenfolgen zu sortieren

files2.add("b"); 
files2.add("A"); 
files2.add("a"); 
files2.add("B"); 

der Auftrag mit diesem Code ist: [A, B, a, b] ich es sein will: [a, A, b, B]

import java.io.File; 
import java.util.*; 

public class Abs { 

    public ArrayList<File> getOrder(ArrayList<File> files) { 
     Collections.sort(files, new Comparator<File>() { 
      public int compare(File file1, File file2) { 
       return file1.getAbsolutePath().compareTo(file2.getAbsolutePath()); 
      } 
     }); 
     return files; 
    } 

} 
+3

Sollte „k.txt“ kleiner als " G.txt "? –

+0

Ist dies auf den lateinischen/rnglischen Zeichensatz beschränkt? –

+1

Wenn Sie Groß- und Kleinbuchstaben gemischt haben? Beispiel AaAa.txt und aAAA.txt? Welches sollte man zuerst sein? – Madthew

Antwort

6

Überprüfen Sie the Collator class.

Sie müssen sorgfältig lesen, was diese Konstanten bedeuten, aber einer von ihnen sollte es Ihnen ermöglichen, Kleinbuchstaben vor den Großbuchstaben zu setzen.

1

Sie könnten Ihre eigenen Comparator implementieren, die wiederum eine Collator verwendet. Siehe example.

1

Sie können wahrscheinlich Bibliotheks- oder Dienstprogrammklassen mit diesem Verhalten verwenden, oder Sie können einen eigenen Vergleicher erstellen.

new Comparator<File>() { 
     public int compare(File file1, File file2) { 
      // Case-insensitive check 
      int comp = file1.getAbsolutePath().compareToIgnoreCase(file2.getAbsolutePath()) 
      // If case-insensitive different, no need to check case 
      if(comp != 0) { 
       return comp; 
      } 
      // Case-insensitive the same, check with case but inverse sign so upper-case comes after lower-case 
      return (-file1.getAbsolutePath().compareTo(file2.getAbsolutePath())); 
     } 
    } 
+0

Dieser Komparator sortiert [a, b, A, B]. Ich will [a, A, b, B] – Kuyo

+0

Das war nicht sehr klar, von Ihrer ursprünglichen Frage, aber dann wird der Code viel einfacher. Auch dann können Sie wahrscheinlich Bibliotheksfunktionen wie die von Igor benutzen. Aktualisierter Code – dtech

0

diese einfache Implementierung Versuchen:

public static void main(String[] args) { 
      List<String> list = new ArrayList<String>(); 
      list.add("a"); 
      list.add("b"); 
      list.add("A"); 
      list.add("B"); 
      System.out.println(list); 
      Collections.sort(list, new Comparator<String>() { 
        @Override 
        public int compare(String o1, String o2) { 
          if (o1.toLowerCase().equals(o2.toLowerCase())) { 
            if (o1.toLowerCase().equals(o1)) { 
              return -1; 
            } else { 
              return 1; 
            } 
          } else { 
            return o1.toLowerCase().compareTo(o2.toLowerCase()); 

          } 
        } 
      }); 
      System.out.println(list); 
    } 
1

Wie bereits von anderen vorgeschlagen, Collator tut, was Sie wollen. Das Schreiben einer dieser Zusammentrag Regeln sah ein wenig beängstigend, aber es sieht aus wie die Standard-Englisch Collator tut genau das, was Sie wollen:

public static void main(String... args) 
{ 
    List<String> items = Arrays.asList("b", "A", "a", "B"); 
    Collections.sort(items, Collator.getInstance(Locale.ENGLISH)); 
    System.out.println(items); 
} 

gibt:

[a, A, b, B]