Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Collator Locale德语-如何仅在普通字母之后排序重音字母_Java_List_Sorting_Collator - Fatal编程技术网

Java Collator Locale德语-如何仅在普通字母之后排序重音字母

Java Collator Locale德语-如何仅在普通字母之后排序重音字母,java,list,sorting,collator,Java,List,Sorting,Collator,我使用Collator对一组对象进行排序。但我发现它像对待普通字母一样对待重音字母: Aktivierung Änderung Auszahlung Bar 相反,我想要这个 Aktivierung Auszahlung Änderung Bar 重音字母应该放在正常字母之后。这也适用于o/ö和u/ü Collator collator = Collator.getInstance(Locale.GERMAN); ... private void sortDocumentiByCategor

我使用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());
          }
      });
}
Collator-Collator=Collator.getInstance(Locale.derman);
...
私人作废或文档分类(最终分类、列表和文档i){
Collections.sort(listDocumenti,新的Comparator(){
@凌驾
公共整数比较(ListDocumenti arg0、ListDocumenti arg1){
返回collator.compare(arg0.getDescriptione(),arg1.getDescriptione());
}
});
}

排序比您需要的复杂多了

Collections.sort将结束umlauts

 List<String> l = Arrays.asList("Aktivierung", "Änderung", "Auszahlung", "Bar");
 System.out.println(l);
 Collections.sort(l);
 System.out.println(l);
List l=Arrays.asList(“Aktivierung”、“Änderung”、“Auszahlung”、“Bar”);
系统输出打印LN(l);
集合。排序(l);
系统输出打印LN(l);
[Aktivierung,Änderung,Auszahlung,Bar]

[Aktivierung、Auszahlung、Bar、Änderung]

'编辑:

根据您自己定义的德国规则实现一个collator

 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);
List l=Arrays.asList(“Aktivierung”、“Änderung”、“Auszahlung”、“Bar”);
字符串germanRules=“
输出将是:

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);
    }
}

你应该展示你的代码。你谈论比较器?OP想要
Aktivierung,Auszahlung,Änderung,Bar
>> [Aktivierung, Auszahlung, Änderung, Bar]