# Sortierung, Collator und Case



## Kalter Kaffee (23. Feb 2009)

Hallo,

ich versuche eine Wortliste zu sortieren. Da Umlaute berücksichtigt werden sollen verwende ich den Collator.
In Bezug auf die Umlaute ist das Ergebnis auch wie erwartet, in Bezug auf Groß-/Kleinschreibung jedoch nicht. Nicht nur dass ich gerne Groß < klein statt andersherum hätte. Aber mich verwundert es auch sehr dass nicht erst alle Worte kommen die mit "m" beginnen und dann alle mit "M" beginnen.


```
List<String> testList = Arrays.asList("muller", "Muller", "Mueller", "mueller", "Müller", "müller", "múller", "Múller", "mußte", "musste", "Test", "test", "Mullmann", "mullmann");
    Collator collator = Collator.getInstance();
    collator.setStrength(Collator.TERTIARY);
    Collections.sort(testList, collator);
    for (String line : testList)
      System.out.println(line);
```

Ergibt: mueller, Mueller, muller, Muller, múller, Múller, müller, Müller, mullmann, Mullmann, musste, mußte, test, Test

Gibt's da noch was einzustellen?

Robert


----------



## Wildcard (23. Feb 2009)

Schonmal IDENTICAL als Strength versucht?


----------



## SlaterB (23. Feb 2009)

mir scheint, dass auch das gegen Regeln wie
l,L<m,M<n,N<o,O<p,P
nicht ankommt

folgendes geht anscheinend

```
public class Test {

	public static void main(String argv[]) throws Exception {

		List<String> testList = Arrays.asList("muller", "Muller", "Mueller",
				"mueller", "Müller", "müller", "múller", "Múller", "mußte",
				"musste", "Test", "test", "Mullmann", "mullmann", "nn", "nm",
				"mn", "Nm", "MN");
		RuleBasedCollator oldCol = (RuleBasedCollator) Collator.getInstance(Locale.GERMAN);
		System.out.println(oldCol.getRules());

		String rules = "m<n<t<M<N<T";
		RuleBasedCollator newCol = new RuleBasedCollator(oldCol.getRules() + rules);

		newCol.setStrength(Collator.PRIMARY);
		Collections.sort(testList, newCol);
		for (String line : testList)
			System.out.println(line);
	}
}
```
also entweder so auf alle 52 normalen Buchstaben ausgeweitet und hoffen, dass es mit den Umlauten keinen Ärger gibt,
oder ein komplett neues Regelwerk angeben, siehe RuleBasedCollator-API


----------



## Kalter Kaffee (23. Feb 2009)

SlaterB hat gesagt.:


> folgendes geht anscheinend
> 
> ```
> ...
> ...



Hey, danke Slater!

Mit allen 53 Buchstaben (A<B<C<D<E<F<G<H<I<J<K<L<M<N<O<P<Q<R<S<T<U<V<W<X<Y<Z,a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<ß<t<u<v<w<x<y<z) scheint es tatsächlich zu funktionieren.
Sogar mit Umlauten und Akzenten, irgendwas mit Normalisierung lt. RuleBasedCollator-API da die meistens aus normalen Buchstaben und Sonderzeichen zusammengesetzt werden.
Nur spezielle Sachen wie dass jetzt ð vor statt nach d einsortiert wird klappt nicht. Aber das sollte in meinem Fall (Sortierung von Filenamen) unkritisch sein.

Eine sehr schöne Lib zu dem Thema is ICU4J. Die hat auch eine Collator-Klasse die viel mehr als die Standardklasse kann. Nur ist es leider selbst auf den Collatorteil runtergestrippt als kompiliertes jar 2,6 MB groß. Overkill für ein Tool das selbst nur 100KB hat.

Robert


----------



## SlaterB (23. Feb 2009)

<Z,a<

du meist wohl 
<Z<a<


----------



## Kalter Kaffee (23. Feb 2009)

SlaterB hat gesagt.:


> <Z,a<
> 
> du meist wohl
> <Z<a<


Eigentlich ja. Ich dachte aber ich hatte das aus einem bestimmten Grund gemacht. Aber nochmal getestet und es ist anscheinend wurscht.

Robert


----------

