我有一个要按首字母排序的 unicode 字符串列表。问题是我不知道要设置 java.text.Collator 它将相似的字母视为不同的字母。
这就是我现在得到的:
- 罗基什基斯
- 沙基艾
- 萨兰泰
- 舍杜瓦
- 希奥利艾
- 希拉莱
- 斯库达斯
- 陶拉格
- 泰尔希艾
这就是我想要得到的(以Š开头的单词应该总是在S之后而不是第二个字母):
- 罗基什基斯
- 萨兰泰
- 斯库达斯
- 沙基艾
- 舍杜瓦
- 希奥利艾
- 希拉莱
- 陶拉格
- 泰尔希艾
我们可以创建一个扩展 Collator 的类并在那里重写 compare 方法。
一个例子是here。
公共类 MyCollator 扩展 Collator {
@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列表进行排序,它会以正确的方式显示。
整理者整理者 = new MyCollator();
Collections.sort(list, collator);
我的测试结果如下:
注意,在结果中,Š显示在T之后,这是因为"Š".compareTo("T")>1等于 true。
我相信你可以在 compare 方法中加入一些逻辑,使 Š显示在S之后,但在T之前。
以上代码使用JDK 1.5版本编译执行。
直接使用Collections.sort(list);您将得到与我上面提到的相同的结果。
所以我测试了整理器强度和分解的所有变体,没有任何改变。我发现通过我的语言环境(“lt_LT”)给出的这种排序实际上在语法上是正确的。