Java 在GWT中使用特殊字符(德语Umlaute)对数组进行排序

Java 在GWT中使用特殊字符(德语Umlaute)对数组进行排序,java,eclipse,gwt,Java,Eclipse,Gwt,我正在从事一个GWT2.6.1项目,从MySQL数据库接收数据 一切正常,但我对德语中的特殊字符有问题 public void onSuccess(RPCObjectStringArray result) { String[] resultArray = result.getStringarray(); Arrays.sort(resultArray,new ComparenoCaseUmlaut()); for (int i = 0; i < resultArra

我正在从事一个GWT2.6.1项目,从MySQL数据库接收数据

一切正常,但我对德语中的特殊字符有问题

public void onSuccess(RPCObjectStringArray result) {
    String[] resultArray = result.getStringarray();
    Arrays.sort(resultArray,new ComparenoCaseUmlaut());
    for (int i = 0; i < resultArray.length; i++) {
        System.out.println(result[i]);
    }
}

public class ComparenoCaseUmlaut implements Comparator<String> {

    @Override
    public int compare(String arg0, String arg1) {
        Collator collator = Collator.getInstance(Locale.GERMAN);    
        collator.setStrength(Collator.SECONDARY); // non case sensitive                 
        return collator.compare(arg0,arg1);
    }

}
public void onSuccess(RPCObjectStringArray结果){
字符串[]resultArray=result.getStringarray();
sort(resultArray,new ComparenoCaseUmlaut());
for(int i=0;i
但是,当GWT不支持collator库时,这就不起作用了

所以-我尝试了这个(为了便于理解-我将resultArray更改为一个示例):

String[]resultArray={“Abc”、“öbc”、“BBC”、“the”、“abd”、“X”};
公共类ComparenoCaseUmlaut实现Comparator{
@凌驾
公共整数比较(字符串arg0、字符串arg1){
字符串string0=arg0.toLowerCase();
字符串string1=arg1.toLowerCase();
第0条:替换(“a”、“a”);
字符串0.替换(“o”、“o”);
字符串0.替换(“u”、“u”);
第0条。替换(“ß”、“s”);
第1条:替换(“a”、“a”);
第1条:替换(“o”、“o”);
第1条:替换(“u”、“u”);
第1条:替换(“ß”、“s”);
返回string0.compareTo(string1);
}
结果:
“Abc” “阿布德” “英国广播公司” “这个” “X” “哥伦布”

我已经调试过.replace函数没有按预期运行。它无法替换“ö”字符-因为他找不到它。与“==”相同的比较

我已经将eclipse项目中的字符集更改为UTF-8-没有任何更改

我是java新手(大约有几个月了,也接触了GWT,但编程方面还是个老手),所以请给我一些细节——或者一个链接……我可以自己学习,然后把结果带回这里。但目前我不知道我是否必须开始


我读了一些关于eclipse插件和GWT国际化的文章,但听起来太高了,难以理解。否则我会学习它,但它会有帮助吗?

好的-我用Marvins提示再次测试了-它正在工作:)非常愚蠢的错误

在我将我的项目更改为UTF-8之前,我尝试了正确的方法。但由于我更改为UTF-8字符集,因此我没有再次尝试,因此我遇到了此错误代码,因为我想证明一个错误是什么都不是:)

我已经改变了

public class ComparenoCaseUmlaut implements Comparator<String> {

    @Override
    public int compare(String arg0, String arg1) {
        String string0 = arg0.toLowerCase();
        String string1 = arg1.toLowerCase();
        string0 = string0.replace("ä", "a");
        string0 = string0.replace("ö", "o");
        string0 = string0.replace("ü", "u");
        string0 = string0.replace("ß", "s");
        string1 = string1.replace("ä", "a");
        string1 = string1.replace("ö", "o");
        string1 = string1.replace("ü", "u");
        string1 = string1.replace("ß", "s");
        return string0.compareTo(string1);  
    }

}
公共类ComparenoCaseUmlaut实现Comparator{
@凌驾
公共整数比较(字符串arg0、字符串arg1){
字符串string0=arg0.toLowerCase();
字符串string1=arg1.toLowerCase();
string0=string0。替换(“a”、“a”);
string0=string0。替换(“o”、“o”);
string0=string0。替换(“u”、“u”);
string0=string0。替换(“ß”、“s”);
string1=string1.替换(“a”、“a”);
string1=string1.替换(“o”、“o”);
string1=string1。替换(“u”、“u”);
string1=string1.替换(“ß”、“s”);
返回string0.compareTo(string1);
}
}

我的结果数组中区分大小写有点令人毛骨悚然…但现在想弄清楚它已经太晚了…

string.replace
返回一个新字符串,并且不会就地修改。好吧-你说得太对了:)这是我的错。现在我的测试示例完全正常了:)但我认为我的MYSQL数据仍然有问题…所以我检查了一个d几分钟后回来:)如果要比较忽略大小写,可以将最后一行更改为
string0.compareTignoreCase(string1)
@JavaDevil:但他必须替换字符的大小写变体,不是吗?@Marvin如果他想区分大小写,他必须这样做sorting@JavaDevil:他已经将两个字符串的大小写都改为小写。因此,只有当他不调用
toLowerCase
时,
compareToIgnoreCase
才有意义hen
string.replace(“ä”)
不会替换
“Ä”
@Marvin哦是的,你是对的,以前没有看到这些行。但是,无论如何,必须进行区分大小写的比较。
public class ComparenoCaseUmlaut implements Comparator<String> {

    @Override
    public int compare(String arg0, String arg1) {
        String string0 = arg0.toLowerCase();
        String string1 = arg1.toLowerCase();
        string0 = string0.replace("ä", "a");
        string0 = string0.replace("ö", "o");
        string0 = string0.replace("ü", "u");
        string0 = string0.replace("ß", "s");
        string1 = string1.replace("ä", "a");
        string1 = string1.replace("ö", "o");
        string1 = string1.replace("ü", "u");
        string1 = string1.replace("ß", "s");
        return string0.compareTo(string1);  
    }

}