Sortieren und Leerzeichen

Microbit

Mitglied
Hallo ich habe ein Sortierproblem.
Ich möchte Strings korrekt sortieren und zwar, dass die Leerzeichen immer über "A" stehen, egal was danach kommt. Dieses Verhalten wäre ja auch logisch, denn in der ASCII-Tabelle steht das Leerzeichen auf 32 und A auf 65. Leider spurt der Collator nicht ganz:
Code:
Schlüterstraße
S Messe-Nord_ICC
Sophie-Charlotten-Straße
Nach meinen Wünschen müsste der mittlere Eintrag ganz oben stehen.
Das gleiche Problem tritt auch beim Bindestrich auf. Die sollen mal ASCII lernen.
Die Vergleichsmethode:
Java:
public int compareTo(Haltestelle compareObject) {
    Collator collator = Collator.getInstance(Locale.GERMAN);
    collator.setStrength(Collator.SECONDARY);
    return collator.compare(getName(), compareObject.getName()); }
 
N

nillehammer

Gast
Unabhänig davon, ob man SPACES vor oder nach Buchstaben einsortieren würde. Sie irgendwo zwischen c und o einzusortieren, ist ja nun wirklich Käse. Ich kann mir nicht vorstellen, dass das compare des Collators so implementiert ist. Ich würde den Fehler also in dem Code vermuten, der die Sortierung vornimmt. Hast du den evtl. selbst geschrieben? Gibt ja sonst sowas wie Collections.sort oder SortedSet.
 

Timothy Truckle

Top Contributor
Hallo ich habe ein Sortierproblem.
Ich möchte Strings korrekt sortieren und zwar, dass die Leerzeichen immer über "A" stehen, egal was danach kommt. Dieses Verhalten wäre ja auch logisch, denn in der ASCII-Tabelle steht das Leerzeichen auf 32 und A auf 65. Leider spurt der Collator nicht ganz:
Dass könnte daran liegen, dass der Collator genau dass machen soll.

Spiel doch mal mit
Code:
setStrength()
rum, ist in der API beschrieben.

bye
TT
 

Microbit

Mitglied
Unabhänig davon, ob man SPACES vor oder nach Buchstaben einsortieren würde. Sie irgendwo zwischen c und o einzusortieren, ist ja nun wirklich Käse.
Ich befürchte das liegt daran dass der die Leerzeichen intern westreicht und das m benutzt. Ich hatte auch schon probiert die Leerzeichen durch Tiefstriche zu ersetzen, aber die werden auch nicht pfleglicher behandelt.
Gibt ja sonst sowas wie Collections.sort oder SortedSet.
Ich verwende ja schon [c]Collections.sort()[/c].
Spiel doch mal mit setStrength() rum, ist in der API beschrieben.
Leider erfolglos.
 
N

nillehammer

Gast
Microbit hat gesagt.:
Ich befürchte das liegt daran dass der die Leerzeichen intern westreicht und das m benutzt. Ich hatte auch schon probiert die Leerzeichen durch Tiefstriche zu ersetzen, aber die werden auch nicht pfleglicher behandelt.
Habe mir gerade den Source-Code der Collator-Implementierung im JDK angeschaut. Das ist ein gutes Beispiel für Code, den man besser so nicht schreibt. Ich habe die Funktionsweise deswegen nicht vollständig verstanden. Aber es gibt dort tatsächlich sowas wie ein Skip von Zeichen unter bestimmten Bedingungen. Deswegen ist Deine Befürchtung durchaus wahrscheinlich. Dann liegt es wohl doch am Collator. Sorry, dass ich an Dir gezweifelt habe :popcorn:

Da du mit strength schon rumgespielt hast und es nichts gebracht hat, die Frage: Bringt ein "normales" String.compareTo()" Dich nicht vielleicht ans Ziel? Also einfach:
Java:
public int compareTo(Haltestelle compareObject) {
   return this.name.compareTo(compareObject.name);
}
 

Microbit

Mitglied
Dies hilft nichts. Es scheint so als wäre diese "Funktion"/nervige Klicki-Bunti-Programmier"hilfe" fix im Code, da ist es egal ob mit oder ohne Collator. Wo genau steht denn nun der eigentliche Code zum sortieren? Ich hab mich in Netbeans schon durchgeklickt aber das sind alles nur Interfaces.
 
N

nillehammer

Gast
Wo genau steht denn nun der eigentliche Code zum sortieren? Ich hab mich in Netbeans schon durchgeklickt aber das sind alles nur Interfaces.
Zunächst einführend (ist vielleicht auch schon ein Selbstgänger): Für eine Sortierreihenfolge braucht man ja erstmal eine Idee, wann etwas größer/kleiner/gleich ist. Das macht die compareTo-Methode. Diese wird von den Algorithmen verwendet, um bei Vergleich zweier Elemente diese Entscheidung zutreffen.

Und zur Frage: Die Sortierung wird in Collections.sort gemacht. Punkt. Du kannst Dich darauf verlassen, dass es funktioniert. Und brauchst da nicht weiter nachzuforschen. Aber wenn Du es wissen willst: Die Klasse Collections bedient sich der Klasse Arrays. Dort sind die Algorithmen (z.B. merge-Sort) implementiert.

Dies hilft nichts. Es scheint so als wäre diese "Funktion"/nervige Klicki-Bunti-Programmier"hilfe" fix im Code, da ist es egal ob mit oder ohne Collator.
Da verstehe ich nicht mal ansatzweise, was Du damit meinst. Wo steht da was fix in welchem Code? Ich dachte, den schreibst du gerade?
 

Microbit

Mitglied
Da verstehe ich nicht mal ansatzweise, was Du damit meinst. Wo steht da was fix in welchem Code? Ich dachte, den schreibst du gerade?
Vergiss es, kleiner Denkfehler von mir.

Was ich aber nicht verstehe ist, warum String in seiner compareTo Methode nichts über mögliche Auslassung von Zeichen stehen hat, aber es trotzdem nicht funktioniert, auch nicht mit deiner vorgeschlagenen Methode.

Ich probier jetzt mal, wenn " S " in einem der beiden Strings drin ist, dass dann auf jeden Fall dieses höher steht.
 
N

nillehammer

Gast
Folgender Code zum Test der natürlichen Sortierreihenfolge von Strings, also mittels Aufruf von compareTo() während der Sortierung:
Java:
public static void main(String[] args) {

  // Array ist falsch Sortiert, Leerzeichen steht in der Mitte
  String[] strArr = { "Schlüterstraße", "S Messe-Nord_ICC", "Sophie-Charlotten-Straße" };
  // Falsch sortiertes Array ausgeben
  System.out.println(Arrays.toString(strArr));
  // Sortieren (intern wird compareTo() von String verwendet)
  Arrays.sort(strArr);
  // Sortiertes Array ausgeben
  System.out.println(Arrays.toString(strArr));
}
Ausgabe:
Code:
[Schlüterstraße, S Messe-Nord_ICC, Sophie-Charlotten-Straße]
[S Messe-Nord_ICC, Schlüterstraße, Sophie-Charlotten-Straße]
Leerzeichen werden also vor's Alphabet einsortiert. Sie werden nicht ausgelassen. Das ist doch genau, was Du wolltest? Das gleiche funktioniert auch mit einer List<String>.
 
Zuletzt bearbeitet von einem Moderator:

Timothy Truckle

Top Contributor
Nach meinen Wünschen müsste der mittlere Eintrag ganz oben stehen.
Das gleiche Problem tritt auch beim Bindestrich auf. Die sollen mal ASCII lernen.
Die Vergleichsmethode:
Java:
public int compareTo(Haltestelle compareObject) {
    Collator collator = Collator.getInstance(Locale.GERMAN);
    collator.setStrength(Collator.SECONDARY);
    return collator.compare(getName(), compareObject.getName()); }
Und noch mal ein Blick in die API eröffnet dies:
Collator hat gesagt.:
Collator is an abstract base class. Subclasses implement specific collation strategies. One subclass, RuleBasedCollator, is currently provided with the Java Platform and is applicable to a wide set of languages. Other subclasses may be created to handle more specialized needs.

Like other locale-sensitive classes, you can use the static factory method, getInstance, to obtain the appropriate Collator object for a given locale. You will only need to look at the subclasses of Collator if you need to understand the details of a particular collation strategy or if you need to modify that strategy.

RuleBasedCollator hat gesagt.:
Ignorable Characters
For ignorable characters, the first rule must start with a relation (the examples we have used above are really fragments; "a < b" really should be "< a < b"). If, however, the first relation is not "<", then all the all text-arguments up to the first "<" are ignorable. For example, ", - < a < b" makes "-" an ignorable character, as we saw earlier in the word "black-birds". In the samples for different languages, you see that most accents are ignorable.
Man muss den [JAPI]RuleBasedCollator[/JAPI] also nur richtig configurieren...

bye
TT
 

mla.rue

Bekanntes Mitglied
Hab mich beim lesen des ersten Beitrags schon gefragt, wieso nicht Arrays.sort benutzt wird, Collator.. .das ist wie mit Kanonen auf Spatzen schießen.

Immer dieser nillehammer, immer wenn man als Anfänger was anbringen kann, kommt der nillehammer einem zuvor :). Ich mag dich nicht, HUE ;)
/sarcasm off
 
N

nillehammer

Gast
[OT]
mla.rue hat gesagt.:
Immer dieser nillehammer, immer wenn man als Anfänger was anbringen kann, kommt der nillehammer einem zuvor . Ich mag dich nicht, HUE
/sarcasm off
Ganz frisch bist Du ja auch nicht mehr (Registriert seit: 22.09.2011) :pueh:[/OT]
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
Willi.We Array sortieren Allgemeine Java-Themen 5
L ArrayList sortieren Allgemeine Java-Themen 2
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
C MySQL Tabellen sortieren. Allgemeine Java-Themen 33
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
P Wertepaare sortieren Allgemeine Java-Themen 3
MiMa Sortieren nach Stellenangaben Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P Listen sortieren Allgemeine Java-Themen 1
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5
B Algortihmus zum linearen Sortieren Allgemeine Java-Themen 1
K ArrayList sortieren Allgemeine Java-Themen 16
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
2 Mehrere Uhrzeiten Sortieren Allgemeine Java-Themen 2
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
Bluedaishi String Array mit Datum und Uhrzeit String sortieren Allgemeine Java-Themen 6
K Sortieren nach Vorgabe Allgemeine Java-Themen 6
S Erste Schritte Arrayliste alphabetisch sortieren mit Eingabe Allgemeine Java-Themen 9
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
W Array Indizes sortieren Allgemeine Java-Themen 16
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
E Array alphabetisch sortieren Allgemeine Java-Themen 1
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
P Beim sortieren nullpointerexception Allgemeine Java-Themen 12
G Map nach key sortieren Allgemeine Java-Themen 14
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
S Int Values sortieren Allgemeine Java-Themen 7
S Sortieren nach Objekten Allgemeine Java-Themen 13
A 2D-array problem (sortieren) Allgemeine Java-Themen 6
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
D priority queue sortieren Allgemeine Java-Themen 10
G List<Person> sortieren Allgemeine Java-Themen 6
K Hashmap sortieren Allgemeine Java-Themen 6
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
M ArrayList<String>, String häufigkeit sortieren Allgemeine Java-Themen 4
J Wie sortieren? Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
K Strings sortieren (knifflig) Allgemeine Java-Themen 7
B JTable nach Icon sortieren Allgemeine Java-Themen 6
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
J Map nach value sortieren Allgemeine Java-Themen 14
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
V ArrayList sortieren Allgemeine Java-Themen 7
S String-Array nach Datum sortieren Allgemeine Java-Themen 10
Developer_X Ein Array nach einem bestimmten Attribut sortieren Allgemeine Java-Themen 3
B Sortieren mit generischen Datentypen Allgemeine Java-Themen 3
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
O Sortieren von Telefonnummern Allgemeine Java-Themen 8
D JTabel sortieren nach mehreren kriterien Allgemeine Java-Themen 3
G Verschachtelte Treemaps, nach Value sortieren Allgemeine Java-Themen 11
K ArrayList nach bestimmtem Muster sortieren Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
S Koordinatentupel-Map sortieren?? Allgemeine Java-Themen 16
C ArrayList sortieren (mehrere Kriterien) Allgemeine Java-Themen 6
G ArrayList mit quicksort sortieren Allgemeine Java-Themen 9
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
G sortieren von generics Allgemeine Java-Themen 10
Z Als Final deklarierte Klasse im Array sortieren Allgemeine Java-Themen 2
C ArrayList nach Datum sortieren Allgemeine Java-Themen 7
O ArrayList sortieren Allgemeine Java-Themen 8
G ArrayList mit Indices parallel sortieren Allgemeine Java-Themen 8
D HashMap sortieren Allgemeine Java-Themen 2
C Sortieren File[] Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
O Vektoren in Vektor sortieren aber mit Java 1.4 (!) Allgemeine Java-Themen 4
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
A Sortieren mit Java Allgemeine Java-Themen 3
J Properties sortieren Allgemeine Java-Themen 6
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
E Bitte um Rat: Sortieren mit ArrayList Allgemeine Java-Themen 2
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
G List mit selbstdefinierten Objekten sortieren Allgemeine Java-Themen 2
F Doppelt verkettete Liste sortieren? Allgemeine Java-Themen 8
S ArrayList nach mehreren Spalten sortieren? Allgemeine Java-Themen 13
G Set absteigend Sortieren Allgemeine Java-Themen 6
B ein spezielles Byte-Array sortieren Allgemeine Java-Themen 11
D Sortieren? Allgemeine Java-Themen 13
N ArrayList sortieren Allgemeine Java-Themen 10
L Nach Häufigkeit sortieren Allgemeine Java-Themen 6
S Dten im Excel sortieren Allgemeine Java-Themen 5
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
H Objekte Sortieren Allgemeine Java-Themen 4
F Kann man String[] sortieren? Allgemeine Java-Themen 2
H will einfach nicht sortieren! Allgemeine Java-Themen 23
T Collections/Arrays sortieren => ä, ö, ü, ß Groß/klein Allgemeine Java-Themen 3
T Problem mit Sortieren Fehler: incompatible Types! Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben