如何设置collat​​ors强度和分解以按首字母排序unicode字符串

时间:2013-10-28 08:22:01

标签: java unicode collation

我有一个unicode字符串列表,我希望按首字母排序。问题是我不知道设置java.text.Collat​​or它会将类似的字母视为不同。

这就是我现在所得到的:

  • Rokiškis
  • Šakiai
  • Salantai
  • Šeduva
  • Šiauliai
  • Šilalė
  • Skuodas
  • 陶拉盖
  • 特尔希艾

这就是我想要的(以Š开头的单词应该总是在 S 之后继续查看第二个字母):

  • Rokiškis
  • Salantai
  • Skuodas
  • Šakiai
  • Šeduva
  • Šiauliai
  • Šilalė
  • 陶拉盖
  • 特尔希艾

2 个答案:

答案 0 :(得分:1)

我们可以创建一个类extends Collat​​or并覆盖那里的compare方法。

这里有一个例子。

公共类MyCollat​​or扩展了Collat​​or {

@Override
public int compare(String source, String target) {
    return source.compareTo(target);
}

@Override
public CollationKey getCollationKey(String source) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int hashCode() {
    // TODO Auto-generated method stub
    return 0;
}

}

然后我们可以使用这个新添加的类对String列表进行排序,它将以正确的方式显示。

Collat​​or collat​​or = new MyCollat​​or();

Collections.sort(list,collat​​or);

我的测试结果如下:

  • Rokiškis
  • Salantai
  • 斯库奥达斯
  • 陶拉盖
  • 特尔希艾
  • Šakiai
  • 舍杜瓦
  • Šiauliai
  • 希拉莱

注意,在结果中,Š显示在 T 之后,这是因为“Š”.compareTo(“T”)> 1 等于true。

我相信您可以在比较方法中加入一些逻辑,以便在 S 之后,但在 T 之前显示Š

使用JDK 1.5版本编译并执行上述代码。

直接使用 Collections.sort(list);你将得到与我上面提到的相同的结果。

答案 1 :(得分:0)

所以我测试了Collat​​ors强度和分解的所有变体,没有任何改变。我发现通过我的语言环境(“lt_LT”)这样的排序实际上是语法上正确的。