Java中文汉字排序Word文档格式.docx
- 文档编号:19334580
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:8
- 大小:18.66KB
Java中文汉字排序Word文档格式.docx
《Java中文汉字排序Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java中文汉字排序Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
?
superT>
c))
等类或方法对含有中文字符的对象进行排序,但是这些在默认情况下都是调用
String.CompareTo(String)
方法,这个方法是比较2个字符的codepointvalue,如果第一个字符的值小于第二个,则在排序结果中第一个会在前面,反之亦然。
java.text.Collator
接口及其实现类
其实java中提供了和语言相关的类,即Collator接口及其实现类。
java.text.RuleBasedCollator
是一个具体类,它实现了Comparator接口中的compare(Object,Object)方法。
RuleBasedCollator根据根据特定语言的默认规则比较字符,也可以按照指定的规则来比较,请参阅javaAPI获取此类的详细信息。
如果我们需要对一个有中文的数组进行排序,则可以使用这个类。
请看如下示例代码:
importjava.util.*;
importjava.text.*;
publicclassTest
{
String[]test=newString[]{
java.util.Arrays.sort(test,
(RuleBasedCollator)Collator.getInstance(Locale.CHINA));
System.out.println("
============"
);
for(Stringkey:
test)
System.out.println(key);
}
以上代码的输出结果为:
============
[
test
。
空
测试
我们
作业
浏
镂空
皙
大家可能会发现只有一部分汉字是按照汉语拼音排序了,还有几个没有。
问题分析:
GB2312:
在简体中文中我们使用比较多的字符集是GB2312-80,简称为GB2312,这个字符集包含了目前最常用的汉字共计6736个。
其中的汉字分为两大类:
常用汉字
次常用汉字
常用汉字按照汉语拼音来排序,而次常用汉字按照笔画部首进行排序。
简体汉字在Unicode中一般是按照gb2312的码点值的顺序来放置的,所以如果是常用汉字java就能够很准确的进行排序,但如果是次常用汉字,则就会出现问题。
在以上示例中,"
镂"
,"
属于次常用字。
解决方案:
RuleBasedCollator类getRules()方法可以返回对应语言的规则设置。
简体中文对应的规则是gb2312所对应的字符。
我们可以把其中的全部汉字提取出来
对这些汉字重新排序
利用RuleBasedCollator(Stringrules)构造器新建一个定制的RuleBasedCollator
参考代码
在以下的代码中,我把排过序的汉字直接作为String对象放在类里面了,如果要让代码变得简洁一些,则可以把完整的规则(特殊字符+排序汉字)存为文件。
packagesorting;
/**
*@authorGaoJianMin
*
*/
publicclassChineseGB2312Collator
*@returnacustomizedRuleBasedCollatorwithChinesecharacters(GB2312)sortedcorrectly
publicstaticfinalRuleBasedCollatorgetFixedGB2312Collator()
RuleBasedCollatorfixedGB2312Collator=null;
try
fixedGB2312Collator=newjava.text.RuleBasedCollator(
ChineseGB2312Collator.getGB2312SpecialChars()+
GB2312Chars
);
}catch(ParseExceptione)
e.printStackTrace();
returnfixedGB2312Collator;
*@returnthespecialcharactersinGB2312charset.
publicstaticfinalStringgetGB2312SpecialChars()
RuleBasedCollatorzh_CNCollator=(RuleBasedCollator)Collator.getInstance(Locale.CHINA);
//index2125isthelastsymbol"
╋"
returnzh_CNCollator.getRules().substring(0,2125);
*6763ChinesecharactersinGB2312charset
publicstaticfinalStringGB2312Chars=
<
吖<
阿<
啊<
锕<
嗄<
哎<
哀<
唉<
埃<
挨<
锿<
捱<
皑<
癌<
嗳<
矮<
蔼<
霭<
艾<
爱<
砹<
隘<
嗌<
嫒<
碍<
暧<
瑷<
安<
桉<
氨<
庵<
谙<
鹌<
鞍<
俺<
埯<
铵<
揞<
犴<
岸<
按<
案<
胺<
暗<
黯<
肮<
昂<
盎<
凹<
坳<
敖<
嗷<
廒<
獒<
遨<
熬<
翱<
聱<
螯<
鳌<
鏖<
拗<
袄<
媪<
岙<
傲<
奥<
骜<
澳<
懊<
鏊"
+
八<
巴<
叭<
扒<
吧<
岜<
芭<
疤<
捌<
笆<
粑<
拔<
茇<
菝<
跋<
魃<
把<
钯<
靶<
坝<
爸<
罢<
鲅<
霸<
灞<
掰<
白<
百<
佰<
柏<
捭<
摆<
呗<
败<
拜<
稗<
扳<
班<
般<
颁<
斑<
搬<
瘢<
癍<
阪<
坂<
板<
版<
钣<
舨<
办<
半<
伴<
扮<
拌<
绊<
瓣<
邦<
帮<
梆<
浜<
绑<
榜<
膀<
蚌<
傍<
棒<
谤<
蒡<
磅<
镑<
勹<
包<
孢<
苞<
胞<
煲<
龅<
褒<
雹<
宝<
饱<
保<
鸨<
堡<
葆<
褓<
报<
抱<
豹<
趵<
鲍<
暴<
爆<
陂<
卑<
杯<
悲<
碑<
鹎<
北<
贝<
狈<
邶<
备<
背<
钡<
倍<
悖<
被<
惫<
焙<
辈<
碚<
蓓<
褙<
鞴<
鐾<
奔<
贲<
锛<
本<
苯<
畚<
坌<
笨<
崩<
绷<
嘣<
甭<
泵<
迸<
甏<
蹦<
逼<
荸<
鼻<
匕<
比<
吡<
妣<
彼<
秕<
俾<
笔<
舭<
鄙<
币<
必<
毕<
闭<
庇<
畀<
哔<
毖<
荜<
陛<
毙<
狴<
铋<
婢<
庳<
敝<
萆<
弼<
愎<
筚<
滗<
痹<
蓖<
裨<
跸<
辟<
弊<
碧<
箅<
蔽<
壁<
嬖<
篦<
薜<
避<
濞<
臂<
髀<
璧<
襞<
边<
砭<
笾<
编<
煸<
蝙<
鳊<
鞭<
贬<
扁<
窆<
匾<
碥<
褊<
卞<
弁<
忭<
汴<
苄<
拚<
便<
变<
缏<
遍<
辨<
辩<
辫<
灬<
杓<
彪<
标<
飑<
髟<
骠<
膘<
瘭<
镖<
飙<
飚<
镳<
表<
婊<
裱<
鳔<
憋<
鳖<
别<
蹩<
瘪<
宾<
彬<
傧<
斌<
滨<
缤<
槟<
镔<
濒<
豳<
摈<
殡<
膑<
髌<
鬓<
冫<
冰<
兵<
丙<
邴<
秉<
柄<
炳<
饼<
禀<
并<
病<
摒<
拨<
波<
玻<
剥<
钵<
饽<
啵<
脖<
菠<
播<
伯<
孛<
驳<
帛<
泊<
勃<
亳<
钹<
铂<
舶<
博<
渤<
鹁<
搏<
箔<
膊<
踣<
薄<
礴<
跛<
簸<
擘<
檗<
逋<
钸<
晡<
醭<
卜<
卟<
补<
哺<
捕<
不<
布<
步<
怖<
钚<
部<
埠<
瓿<
簿"
;
publicclassChineseGB2312ComparatorimplementsComparator<
String>
Comparable<
{
privateRuleBasedCollatorGB2312Collator=
ChineseGB2312Collator.getFixedGB2312Collator();
privateStringstr1;
*@paramstr1
publicChineseGB2312Comparator(Stringstr1){
this.str1=str1;
publicChineseGB2312Comparator(){
this.str1="
"
*@paramstr2
*@returnanintegerindicatintthecomparisonresult
*@seejava.util.Comparator#compare(Object,Object)
publicintcompare(Stringstr1,Stringstr2){
returnGB2312Cpare(str1,str2);
*
@seejava.lang.Comparable#compareTo(Object)
publicintcompareTo(Stringstr2){
测试代码及结果
代码:
java.util.Arrays.sort(test,newChineseGB2312Comparator());
ChineseGB2312Comparator类同时实现了Comparator,Comparable接口,这样以后能够使用compare,compareTo方法的时候都可以使用这个类。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 中文 汉字 排序