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

时间:2015-04-27 22:58:36

标签: java eclipse gwt

我正在研究从MySQL数据库接收数据的GWT 2.6.1项目。

一切正常,但我对德语中的öäüÖÄÜ(特殊字符)有问题。

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

}

但是,当GWT不支持collat​​or lib时,这不起作用。

所以 - 我试过这个(为了让它易于理解 - 我已经将resultArray更改为一个例子):

String[] resultArray = { "Abc", "öbc", "BBC", "the", "abd", "X"};

public class ComparenoCaseUmlaut implements Comparator<String> {

@Override
public int compare(String arg0, String arg1) {

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

结果:
 “ABC”  “ABD”  “BBC”  “中的”  “X”  “OBC”

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

我已经将我的eclipse项目中的charset更改为UTF-8 - 没有任何改变。

我是java的新手(大约几个月,也是GWT,但编程中的老人),所以请给我一些细节 - 或链接......我可以自己学习并将结果带回来这里。但目前我不知道我必须开始......

我读了一些关于eclipse插件和GWT国际化的内容,但听起来太高了,无法理解。否则我会学到它 - 但它会有用吗?

1 个答案:

答案 0 :(得分:0)

好的 - 我再次使用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);  
    }

}

在我的结果数组中有一些令人毛骨悚然的区分大小写...但现在暂时搞清楚...