Java里实现中文字符串数组的音序排序有没有现成的?
比如有如下数组:
|
希望用 Arrays.sort() 排序后变成:
|
我定义了如下的Comparator,但是不符合要求:
|
顺便说一句,我检查了我的 Locale.getDefault(), 结果是 "zh_CN"。
比如有如下数组:
|
希望用 Arrays.sort() 排序后变成:
|
我定义了如下的Comparator,但是不符合要求:
|
顺便说一句,我检查了我的 Locale.getDefault(), 结果是 "zh_CN"。
String类型的compareTo方法比较的只是字符的Unicode。有如下代码为证:
|
我尝试使用了 Collator, 如下:
|
结果和不使用 Collator 是一样的,我试用了 Collator.getInstance(Locale.CHINA),结果还是一样的。
如果不知道拼音,只用汉字我想是比较难以实现的
搞定了!感觉就是Java的国际化做的真是差啊!DOTNET里实现的很完美。
我用C#.NET写了个小程序,把GBK所有字符按音序排序后,生成一小段Java程序源码,把排序结果放在Java字符串里。
在Java里,根据此字符串做了个Comparator进行排序。
不能这么说吧,我觉得是因为.net的工具好些:)
我觉得我完成这个没用到什么工具。DOTNET的类库实现的很好,确实能让程序员专心于实现自己的业务逻辑,而不用再去考虑实现底层的东东。JDK还做不到这一点。就比如说汉字排序的问题,其实很简单,Java里也已经有了相应的Collator类,但是就没去很好的实现。也许对英语语言实现的不错吧,对中文为什么就不实现呢?
我查了一遍文档,在Java里面是可以实现的,也不需要自己写程序:
import java.util.*;
import java.text.*;
public class Test2 {
public static void main(String args[]) {
//Comparator cmp = (RuleBasedCollator)java.text.Collator.getInstance(java.util.Locale.CHINA);//try testing various locales
Comparator cmp = (RuleBasedCollator)java.text.Collator.getInstance(java.util.Locale.CHINA);//try testing various locales
String[] arr = {"ÕÂÈý", "Àï˹", "ÍõÎå", "Ñî¹óåú"};
java.util.Arrays.sort(arr, cmp);
for (int i = 0; i < arr.length; i++)
System.out.println(arr);
}
}
import java.text.Collator;
import java.util.Comparator;
public class StringASC implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return Collator.getInstance(java.util.Locale.CHINA).compare(o1, o2);
}
}