Sortieren - Groß- und Kleinschreibung nicht beachten

Hallo zusammen...

ich hab ein kleines Problem mit dem Sortieren:.

Ich habe einen String eingelesen und mit "toCharArray()" in ein Array konvertiert. Mit Arrays.sort() habe ich alles sortiert und wieder ausgegeben.... schön und gut,

ABER:

blöderweise wird Groß- Kleinschreibung beachtet. Ich brauch aber eine Sortierungsmöglichkeit die case_insensitive arbeitet. Da hab ich dann im Net das gefunden:

Comparator c = String.CASE_INSENSITIVE_ORDER;

außerdem hab ich mir die Comperator Klasse angesehen, aber irgendwie bin check ichs net wie ich das auf meinen Fall anwenden kann... Hat irgendwer einen Hinweis?

Ein Beispiel zur Veranschaulichung:
Eingabe: cAdgfHbIe
Ausgabe: AbcdefgHI

lg
christoph
 
Hallo!

hmm,

dir wird wohl oder übel nicht's anderes übrig bleiben als das hier:
Code:
        String str = "AcbaBC";
        char[] cA = str.toCharArray();
        List list = new ArrayList();
        for (int i = 0; i < cA.length; i++) {
            list.add(String.valueOf(cA[i]).intern());
        }
        Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
        System.out.println(list);

Wenn man mal von der möglichkeit des adequaten handischen Sortierens absieht...

Gruß Tom
 
Hallo Tom,

danke für die Hilfe... es hat bestens funktioniert.... zwei Fragen hab ich dennoch:

Was bedeutet intern()?

Code:
list.add(String.valueOf(cA[i]).intern());

=> ich habs einmal ohne dem probiert und es funktioniet auch.

Und zweitens:

Wenn ich das Programm kompiliere bekomme ich folgende Hinweise:

Note: Test.java uses unchecked or unsafe operations
Note: Recompile with -Xlint:unchecked for details

Hab ichs halt noch einmal kompiliert und 3 Warnings bekommen:

[unchecked] unchecked call to add(E) as a member of the raw type

[unchecked] unchecked conversion found

[unchecked] unchecked method invocation: <T>sort (java.util.List<T>,java.util.Comparator<? super T>) in java.util.Collections is applied to (java.util.List,java.util.Comparator<java.lang.String>)

Was bedeutet das? Es hat ja trotzdem funktioniert....

Vielen Dank schon mal...

lg
christoph
 
Hallo!

inter() fügt den gerade erzeugten String in den internen String-Pool der JVM ein. Wird zukünftig der gleiche String erzeugt und anschließend intern() aufgerufen wird die Referenz auf den String aus dem Pool zurückgegeben.

Code:
String s = new String("abc"); //Wir erzeugen einen String (s1)
s1 = s.intern(); //Wir fügen s dem internen Stringppol hinzu (annahme es gab noch keinen solchen String)
String s2 = new String("abc").intern(); //Wir erzuegen einen neuen String(s2) und fügen ihn jedoch dem internen String-Pool hinzu. Da dort schon ein solcher string vorhanden ist wird einfach die Referenz darauf zurückgegeben. Die Referenz zum String (s2) ist nicht mehr erreichbar weshalb die 2.te String Instanz ("abc") vom Garbage Collection aufgesammelt werdne kann.

Dann ergibt:
s1 == s2 -> true!

Hier nochmal am Stück:

		String s1 = new String("abc");
		s1 = s1.intern();

		String s2 = new String("abc").intern();

		System.out.println(s2 == s1);

Die Warnungen erhälst du, weil du mit Java 5.0 kompilierst und "Raw"-Typed-Collections verwendest. Du müsstest eigentlich überall mittels Generics die Typen welche die Collection enthalten soll angeben.

Gruß Tom
 
Hallo Leute,

Ich habe eine Frage zum Sortierprogi: funktioniert die Ausgabe auch als String?

Im txt file hab ich die Frage genauer gestellt. :confused:
 

Anhänge

Thomas Darimont hat gesagt.:
Die Warnungen erhälst du, weil du mit Java 5.0 kompilierst und "Raw"-Typed-Collections verwendest. Du müsstest eigentlich überall mittels Generics die Typen welche die Collection enthalten soll angeben.

Gruß Tom

Könntest du das etwas näher erläutern? Ist das dann noch abwärtskompatibel?
Wie soll es dann aussehen? Was sind Generics? (Die Version für 3-Jährige bitte :D )
 

Neue Beiträge

Zurück