# Sortieren - Groß- und Kleinschreibung nicht beachten



## christoph lindtner (24. Januar 2005)

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


----------



## Thomas Darimont (24. Januar 2005)

Hallo!

hmm, 

dir wird wohl oder übel nicht's anderes übrig bleiben als das hier:

```
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


----------



## christoph lindtner (25. Januar 2005)

Hallo Tom,

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

Was bedeutet intern()?


```
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


----------



## Thomas Darimont (25. Januar 2005)

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. 


```
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


----------



## christoph lindtner (25. Januar 2005)

Thx a lot...

Bei Generics kenn ich mich noch net wirklich aus... das werd ich mir mal genauer anschauen...

lg
Christoph


----------



## georg345 (13. Februar 2005)

Hallo Leute,

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

Im txt file hab ich die Frage genauer gestellt.


----------



## takidoso (14. Februar 2005)

Halli hallo, 
was Sortieren angeht ist die Collator-Klasse sehr zu empfehlen, da sie nach der jeweiligen Sprache sortiert, also im Deutschen die Umlaute richtig mit einbezieht.

ein Beispiel findet man auch hier im Forum

http://www.tutorials.de/tutorials189730.html&highlight=takidoso

in der Hoffnung das dies obige nun zu einer Art Link wird 


Takidoso


----------



## Basti54 (3. März 2005)

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  )


----------

