Collator Locale German - 如何仅在正常字母之后对重音字母进行排序
Collator Locale German - How to sort accented letters only after the normal ones
我已经使用 Collator 对对象数组进行排序。但我发现它像对待普通字母一样对待重音字母:
Aktivierung
Änderung
Auszahlung
Bar
相反,我想要这个
Aktivierung
Auszahlung
Änderung
Bar
重音字母应该紧跟在正常字母之后。这也适用于 o/ö 和 u/ü。
Collator collator = Collator.getInstance(Locale.GERMAN);
...
private void sortDocumentiByCategoria(final Collator collator, List<ListDocumenti> listDocumenti) {
Collections.sort(listDocumenti, new Comparator<ListDocumenti>(){
@Override
public int compare(ListDocumenti arg0, ListDocumenti arg1) {
return collator.compare(arg0.getDescrizione(), arg1.getDescrizione());
}
});
}
您使排序变得比您需要的更复杂...
Collections.sort 会将元音变音结束
List<String> l = Arrays.asList("Aktivierung", "Änderung", "Auszahlung", "Bar");
System.out.println(l);
Collections.sort(l);
System.out.println(l);
[Aktivierung, Änderung, Auszahlung, Bar]
[Aktivierung, Auszahlung, Bar, Änderung]
'编辑:
根据您自己定义的德语规则实施整理器...
List<String> l = Arrays.asList("Aktivierung", "Änderung", "Auszahlung", "Bar");
String germanRules = "< A < a < Ä < ä < O < o < Ö < ö < U < u < Ü < ü";
RuleBasedCollator ruleBasedCollator = new RuleBasedCollator(germanRules);
Collections.sort(l, ruleBasedCollator);
System.out.println(l);
输出将是:
Aktivierung, Auszahlung, Änderung, Bar
花了一些时间,但我想通了。给你!
public static void main(String[] args) throws IOException {
List<String> list = Arrays.asList("Änderung", "Aktivierung", "Auszahlung", "Bar");
Collections.sort(list, createCollator());
System.out.println(list);
}
private static RuleBasedCollator createCollator() {
String german = "" +
"= '-',''' " +
"< A< a< ä< Ä< B,b< C,c< D,d< E,e< F,f< G,g< H,h< I,i< J,j" +
"< K,k< L,l< M,m< N,n< O< o< Ö< ö< P,p< Q,q< R,r< S,s< T,t" +
"< U< u< Ü< ü< V,v< W,w< X,x< Y,y< Z,z" +
"& ss=ß";
try {
return new RuleBasedCollator(german);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
对其进行测试会产生以下结果:
>> [Aktivierung, Auszahlung, Änderung, Bar]
我已经使用 Collator 对对象数组进行排序。但我发现它像对待普通字母一样对待重音字母:
Aktivierung
Änderung
Auszahlung
Bar
相反,我想要这个
Aktivierung
Auszahlung
Änderung
Bar
重音字母应该紧跟在正常字母之后。这也适用于 o/ö 和 u/ü。
Collator collator = Collator.getInstance(Locale.GERMAN);
...
private void sortDocumentiByCategoria(final Collator collator, List<ListDocumenti> listDocumenti) {
Collections.sort(listDocumenti, new Comparator<ListDocumenti>(){
@Override
public int compare(ListDocumenti arg0, ListDocumenti arg1) {
return collator.compare(arg0.getDescrizione(), arg1.getDescrizione());
}
});
}
您使排序变得比您需要的更复杂...
Collections.sort 会将元音变音结束
List<String> l = Arrays.asList("Aktivierung", "Änderung", "Auszahlung", "Bar");
System.out.println(l);
Collections.sort(l);
System.out.println(l);
[Aktivierung, Änderung, Auszahlung, Bar]
[Aktivierung, Auszahlung, Bar, Änderung]
'编辑:
根据您自己定义的德语规则实施整理器...
List<String> l = Arrays.asList("Aktivierung", "Änderung", "Auszahlung", "Bar");
String germanRules = "< A < a < Ä < ä < O < o < Ö < ö < U < u < Ü < ü";
RuleBasedCollator ruleBasedCollator = new RuleBasedCollator(germanRules);
Collections.sort(l, ruleBasedCollator);
System.out.println(l);
输出将是:
Aktivierung, Auszahlung, Änderung, Bar
花了一些时间,但我想通了。给你!
public static void main(String[] args) throws IOException {
List<String> list = Arrays.asList("Änderung", "Aktivierung", "Auszahlung", "Bar");
Collections.sort(list, createCollator());
System.out.println(list);
}
private static RuleBasedCollator createCollator() {
String german = "" +
"= '-',''' " +
"< A< a< ä< Ä< B,b< C,c< D,d< E,e< F,f< G,g< H,h< I,i< J,j" +
"< K,k< L,l< M,m< N,n< O< o< Ö< ö< P,p< Q,q< R,r< S,s< T,t" +
"< U< u< Ü< ü< V,v< W,w< X,x< Y,y< Z,z" +
"& ss=ß";
try {
return new RuleBasedCollator(german);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
对其进行测试会产生以下结果:
>> [Aktivierung, Auszahlung, Änderung, Bar]