# String-Array sortieren



## Roman (13. Dez 2004)

Hallo zusammen.

Ich suche einen Algorithmus oder eine Funktion, die ein String-Array alphabetisch sortieren kann. Die sort-Funktion in Java.Util.Arrays ist ja nur für Datentypen wie Integer, Character, etc. möglich.

Es handelt sich bei dem Array um normale Strings, keine Zahlen.

Ich habe schon einige Seiten danach durchforstet und nichts richtiges gefunden (nur für Strings mit Zahlenwerten oder so). Vielleicht hat ja jemand was zur Hand  


Vielen Dank
Roman


----------



## foobar (13. Dez 2004)

String implementiert Comparable, also kannst du es auch mit Arrays.sort sortieren.
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html#sort(java.lang.Object[])
http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html


----------



## Manfred (13. Dez 2004)

Du musst ein Array auslesen und dann z.B. mittels Bubblesort mit der Methode compareToIgnoreCase vergleichen


int a = liste_.compareToIgnoreCase(liste[i+1])

a ist kleiner Null, wenn liste kleiner als liste[i+1] ist oder grösser Null wenn umgekehrt_


----------



## Bert Brenner (13. Dez 2004)

Die Klasse String hat bring bereits eine compareTo Methode mit.

Einfach Arrays.sort verwenden.

*schnief* immer sind andere schneller.


----------



## L-ectron-X (13. Dez 2004)

```
import java.util.*;

class Test {
   public static void main(String[] args) {
      String[] str = new String[5];
      str[0] = "Sabine";
      str[1] = "Wolfgang";
      str[2] = "Detlef";
      str[3] = "Albert";
      str[4] = "Mario";
      Arrays.sort(str);
      for(int i = 0; i < str.length; i++)
         System.out.println(str[i]);
   }
}
```
Probiere es doch einfach mal mit diesem Beispiel aus.


----------



## Manfred (13. Dez 2004)

Ich nehme an, mann kann Arrays.sort() auch mit ArrayList verwenden??


----------



## L-ectron-X (13. Dez 2004)

Nein, eine ArrayList wird so sortiert:

```
Collections.sort(myArrayList);
```
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html

Voraussetzung dafür ist es, dass die Objekte in der ArrayList das Interface Comparable implementieren und die compareTo()-Methode überschreiben.


----------



## Roman (13. Dez 2004)

@L-ectron-X
Das habe ich bereits probiert. Die sort-Funktion von util.arrays funktioniert nicht (jedenfalls so wie ich gerne möchte).

Die Fehlermeldung sieht so aus:

```
Exception in thread "main" java.lang.NullPointerException
	at java.lang.String.compareTo(Unknown Source)
	at java.lang.String.compareTo(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.mergeSort(Unknown Source)
	at java.util.Arrays.sort(Unknown Source)
	at tableListRefresh(Gui.java:125)
	at Gui.<init>(Gui.java:69)
	at main(Main.java:38)
```

Mein code so (gekürzt):

```
import java.util.Arrays;


        int tableIds[] = new int[200];
        String tableNames[] = new String[200];
        int countTableIds[] = new int[1];
        
        
        getTableIds(tableIds, countTableIds);
        
        for( int i = 0; i < countTableIds[0]; i++ )
        {
            tableNames[i] = getTableName(tableIds[i]);
        }
        Arrays.sort(tableNames);
```

tableNames hat passende Inhalte. Ich kann diese nachher (ohne das sort()) problemlos ausgeben.

Edit:
In der Funktion geht es darum, Tabellennamen auszulesen und diese sortiert auszugeben. Da dieses über ein C-Programm funktioniert (Swig), ist die countTableIds-Variable ein einzelliges Int-Array.


Edit 2:
Ich muss mir das nochmals genauer anschauen, denn dein Beispiel, L-ectron-X, funktioniert so.


----------



## Manfred (13. Dez 2004)

Danke!


----------



## L-ectron-X (13. Dez 2004)

Die NullPointerException hat jedenfalls nichts mit dem Sortieren zu tun. Und so wie ich das sehe, ist das auch richtig von Dir geschrieben worden.


----------



## Roman (13. Dez 2004)

Ich weiss jetzt woran es liegt.

Ich habe ja das Array mit 200 Zellen, diese sind aber nicht alle beschrieben, d.h. ich habe momentan 103 Elemente. Da die Restlichen natürlich nicht initialisiert sind, kommt es da zur NullPointerException.

(Selbiges passiert bei deiner Funktion, wenn der String beispielsweise auf 10 Zellen gesetzt würde.)


Danke für eure Hilfe!


----------



## jptc.org (13. Dez 2004)

und solltest du auch noch locale abhängig sortieren wollen (z.b. für die reihenfolge von ä,ö,ü...) dann verwendet man am besten die Klasse Collator.

http://java.sun.com/j2se/1.4.2/docs/api/java/text/Collator.html

den nicht jeder anwender ist mit der standard compareTo zu befriedigen.


----------



## bygones (13. Dez 2004)

uih - neue Klasse kennengelernt - danke Karsten


----------

