如何设置整理器强度和分解以按首字母对 unicode 字符串进行排序

Ryt*_*kna 5 java unicode collation

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

这就是我现在得到的:

  • 罗基什基斯
  • 夏爱
  • 萨兰泰
  • 舍杜瓦
  • 希奥利艾
  • 西拉尔?
  • 斯考达斯
  • 陶拉格?
  • 泰尔希艾

这就是我想要得到的(以Š开头的单词应该总是跟在S后面而不是第二个字母):

  • 罗基什基斯
  • 萨兰泰
  • 斯考达斯
  • 夏爱
  • 舍杜瓦
  • 希奥利艾
  • 西拉尔?
  • 陶拉格?
  • 泰尔希艾

Mou*_*ava 1

我们可以创建一个扩展 Collat​​or 的类并重写其中的比较方法。

\n\n

这里有一个例子。

\n\n

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

\n\n
@Override\npublic int compare(String source, String target) {\n    return source.compareTo(target);\n}\n\n@Override\npublic CollationKey getCollationKey(String source) {\n    // TODO Auto-generated method stub\n    return null;\n}\n\n@Override\npublic int hashCode() {\n    // TODO Auto-generated method stub\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

}

\n\n

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

\n\n

整理器整理器 = new MyCollat​​or();

\n\n

Collections.sort(列表,整理器);

\n\n

我的测试结果如下:

\n\n
    \n
  • Roki\xc5\xa1kis
  • \n
  • 萨兰泰
  • \n
  • 斯库奥达斯
  • \n
  • 陶拉格\xc4\x97
  • \n
  • 电话\xc5\xa1iai
  • \n
  • \xc5\xa0akiai
  • \n
  • \xc5\xa0eduva
  • \n
  • \xc5\xa0iauliai
  • \n
  • \xc5\xa0ilal\xc4\x97
  • \n
\n\n

请注意,在结果中,\xc5\xa0显示在T之后,这是因为"\xc5\xa0".compareTo("T")>1等于 true。

\n\n

我相信您可以在比较方法中添加一些逻辑,使 \xc5\xa0显示在S之后,但在T之前。

\n\n

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

\n\n

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

\n