欢迎来到天天文库
浏览记录
ID:50369405
大小:33.00 KB
页数:10页
时间:2020-03-08
《Java中文汉字排序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、//Collator类是用来执行区分语言环境的String比较的,这里选择使用CHINA Comparatorcmp=Collator.getInstance(java.util.Locale.CHINA); TreeMaptree=newTreeMap(cmp); String[]arr={"张三","李四","王五"}; //使根据指定比较器产生的顺序对指定对象数组进行排序。 Arrays.sort(arr,cmp); for(inti=0;i2、(arr[i]); 另: 示例文本: String[]test=newString[]{ "作业", "测试", "test", "我们", "。空", "镂空", "[", "浏", "皙" }; jdk版本: 1.5.6 3、开发平台: Eclipse3.1 关键字:中文排序 概述 我们在应用程序中可能会经常遇到对中文排序的问题,例如姓名列表,词汇表等等。对中文排序,我们使用比较多的是根据汉语拼音发音来确定顺序。 我们可能会经常使用 java.util.Set 接口, java.util.Arrays.sort((T[]a,Comparatorc)) 等类或方法对含有中文字符的对象进行排序,但是这些在默认情况下都是调用 String.CompareTo(String) 方法,这个方法是比较2个字符的codepoi4、ntvalue,如果第一个字符的值小于第二个,则在排序结果中第一个会在前面,反之亦然。 java.text.Collator 接口及其实现类 其实java中提供了和语言相关的类,即Collator接口及其实现类。 java.text.RuleBasedCollator 是一个具体类,它实现了Comparator接口中的compare(Object,Object)方法。RuleBasedCollator根据根据特定语言的默认规则比较字符,也可以按照指定的规则来比较,请参阅javaAPI获取此类的详细信息。如果我们需要对一个5、有中文的数组进行排序,则可以使用这个类。请看如下示例代码: importjava.util.*; importjava.text.*; publicclassTest { String[]test=newString[]{ "作业", "测试", "test", "我们", "。空", "镂空", "[", "浏", "皙" }; java.util.Arrays.sort(test, (RuleBasedCollator)Collator.getInstance(Locale.CHINA)); 6、 System.out.println("============"); for(Stringkey:test) System.out.println(key); } 以上代码的输出结果为: ============ [ test 。空 测试 我们 作业 浏 镂空 皙 大家可能会发现只有一部分汉字是按照汉语拼音排序了,还有几个没有。 问题分析: GB2312: 在简体中文中我们使用比较多的字符集是GB2312-80,简称为GB2312,这个字符集包含了目前最常用的汉字共计6736个。其中的汉字分7、为两大类: 常用汉字 次常用汉字 常用汉字按照汉语拼音来排序,而次常用汉字按照笔画部首进行排序。 简体汉字在Unicode中一般是按照gb2312的码点值的顺序来放置的,所以如果是常用汉字java就能够很准确的进行排序,但如果是次常用汉字,则就会出现问题。在以上示例中,"镂","皙"属于次常用字。 解决方案: RuleBasedCollator类getRules()方法可以返回对应语言的规则设置。简体中文对应的规则是gb2312所对应的字符。 我们可以把其中的全部汉字提取出来 对这些汉字重新排序 利用RuleBa8、sedCollator(Stringrules)构造器新建一个定制的RuleBasedCollator 参考代码 在以下的代码中,我把排过序的汉字直接作为String对象放在类里面了,如果要让代码变得简洁一些,则可以把完整的规则(特殊字符+排序
2、(arr[i]); 另: 示例文本: String[]test=newString[]{ "作业", "测试", "test", "我们", "。空", "镂空", "[", "浏", "皙" }; jdk版本: 1.5.6
3、开发平台: Eclipse3.1 关键字:中文排序 概述 我们在应用程序中可能会经常遇到对中文排序的问题,例如姓名列表,词汇表等等。对中文排序,我们使用比较多的是根据汉语拼音发音来确定顺序。 我们可能会经常使用 java.util.Set 接口, java.util.Arrays.sort((T[]a,Comparatorc)) 等类或方法对含有中文字符的对象进行排序,但是这些在默认情况下都是调用 String.CompareTo(String) 方法,这个方法是比较2个字符的codepoi
4、ntvalue,如果第一个字符的值小于第二个,则在排序结果中第一个会在前面,反之亦然。 java.text.Collator 接口及其实现类 其实java中提供了和语言相关的类,即Collator接口及其实现类。 java.text.RuleBasedCollator 是一个具体类,它实现了Comparator接口中的compare(Object,Object)方法。RuleBasedCollator根据根据特定语言的默认规则比较字符,也可以按照指定的规则来比较,请参阅javaAPI获取此类的详细信息。如果我们需要对一个
5、有中文的数组进行排序,则可以使用这个类。请看如下示例代码: importjava.util.*; importjava.text.*; publicclassTest { String[]test=newString[]{ "作业", "测试", "test", "我们", "。空", "镂空", "[", "浏", "皙" }; java.util.Arrays.sort(test, (RuleBasedCollator)Collator.getInstance(Locale.CHINA));
6、 System.out.println("============"); for(Stringkey:test) System.out.println(key); } 以上代码的输出结果为: ============ [ test 。空 测试 我们 作业 浏 镂空 皙 大家可能会发现只有一部分汉字是按照汉语拼音排序了,还有几个没有。 问题分析: GB2312: 在简体中文中我们使用比较多的字符集是GB2312-80,简称为GB2312,这个字符集包含了目前最常用的汉字共计6736个。其中的汉字分
7、为两大类: 常用汉字 次常用汉字 常用汉字按照汉语拼音来排序,而次常用汉字按照笔画部首进行排序。 简体汉字在Unicode中一般是按照gb2312的码点值的顺序来放置的,所以如果是常用汉字java就能够很准确的进行排序,但如果是次常用汉字,则就会出现问题。在以上示例中,"镂","皙"属于次常用字。 解决方案: RuleBasedCollator类getRules()方法可以返回对应语言的规则设置。简体中文对应的规则是gb2312所对应的字符。 我们可以把其中的全部汉字提取出来 对这些汉字重新排序 利用RuleBa
8、sedCollator(Stringrules)构造器新建一个定制的RuleBasedCollator 参考代码 在以下的代码中,我把排过序的汉字直接作为String对象放在类里面了,如果要让代码变得简洁一些,则可以把完整的规则(特殊字符+排序
此文档下载收益归作者所有