Java中文汉字排序.doc_第1页
Java中文汉字排序.doc_第2页
Java中文汉字排序.doc_第3页
Java中文汉字排序.doc_第4页
Java中文汉字排序.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/ Collator 类是用来执行区分语言环境的 String 比较的,这里选择使用CHINAComparator cmp = Collator.getInstance(java.util.Locale.CHINA);TreeMap tree=new TreeMap(cmp);String arr = 张三, 李四, 王五;/ 使根据指定比较器产生的顺序对指定对象数组进行排序。Arrays.sort(arr, cmp);for (int i = 0; i arr.length; i+)System.out.println(arri);names = 张三, 李四, 王五, 刘六;names.sort(function(a,b)return a.localeCompare(b);/a,b 为数组a的某两个值,自动传入alert(names);另:示例文本:String test = new String 作业,测试,test,我们,。空,镂空,浏,皙;jdk 版本:1.5.6开发平台:Eclipse 3.1关键字: 中文排序概述我们在应用程序中可能会经常遇到对中文排序的问题,例如姓名列表,词汇表等等。对中文排序,我们使用比较多的是根据汉语拼音发音来确定顺序。我们可能会经常使用java.util.Set接口,java.util.Arrays .sort(T a, Comparator c)等类或方法对含有中文字符的对象进行排序,但是这些在默认情况下都是调用String .CompareTo(String )方法,这个方法是比较2个字符的 codepoint value,如果第一个字符的值小于第二个,则在排序结果中第一个会在前面,反之亦然。java.text.Collator接口及其实现类其实 java 中提供了和语言相关的类,即 Collator 接口及其实现类。java.text.RuleBasedCollator是一个具体类,它实现了 Comparator 接口中的 compare(Object, Object) 方法。RuleBasedCollator 根据根据特定语言的默认规则比较字符,也可以按照指定的规则来比较,请参阅 java API 获取此类的详细信息。如果我们需要对一个有中文的数组进行排序,则可以使用这个类。请看如下示例代码:import java.util.*;import java.text.*;public class TestString test = new String 作业 ,测试 ,test ,我们 ,。空 ,镂空 , ,浏 ,皙;java.util.Arrays .sort(test,(RuleBasedCollator )Collator .getInstance(Locale .CHINA);System .out.println(= );for (String key : test)System .out.println(key);以上代码的输出结果为:=test。空测试我们作业浏镂空皙大家可能会发现只有一部分汉字是按照汉语拼音排序了,还有几个没有。问题分析:GB2312:在简体中文中我们使用比较多的字符集是 GB2312-80,简称为 GB2312,这个字符集包含了目前最常用的汉字共计 6736 个。其中的汉字分为两大类:常用汉字次常用汉字常用汉字按照汉语拼音来排序,而次常用汉字按照笔画部首进行排序。简体汉字在 Unicode 中一般是按照 gb2312 的码点值的顺序来放置的,所以如果是常用汉字 java 就能够很准确的进行排序,但如果是次常用汉字,则就会出现问题。在以上示例中,镂,皙 属于次常用字。解决方案:RuleBasedCollator 类 getRules() 方法可以返回对应语言的规则设置。简体中文对应的规则是 gb2312 所对应的字符。我们可以把其中的全部汉字提取出来对这些汉字重新排序利用RuleBasedCollator(String rules) 构造器新建一个定制的 RuleBasedCollator参考代码在以下的代码中,我把排过序的汉字直接作为 String 对象放在类里面了,如果要让代码变得简洁一些,则可以把完整的规则(特殊字符排序汉字)存为文件。package sorting;import java.util.*;import java.text.*;/* author GaoJianMin*/public class ChineseGB2312Collator/* return a customized RuleBasedCollator with Chinese characters (GB2312) sorted correctly*/public static final RuleBasedCollator getFixedGB2312Collator()RuleBasedCollator fixedGB2312Collator =null ;tryfixedGB2312Collator = new java.text.RuleBasedCollator (ChineseGB2312Collator.getGB2312SpecialChars() +GB2312Chars);catch (ParseException e)e.printStackTrace();return fixedGB2312Collator;/* return the special characters in GB2312 charset.*/public static final String getGB2312SpecialChars()RuleBasedCollator zh_CNCollator = (RuleBasedCollator )Collator .getInstance(Locale .CHINA);/index 2125 is the last symbol return zh_CNCollator.getRules().substring(0,2125);/* 6763 Chinese characters in GB2312 charset*/public static final String GB2312Chars =吖阿啊锕嗄哎哀唉埃挨锿捱皑癌嗳矮蔼霭艾爱砹隘嗌嫒碍暧瑷安桉氨庵谙鹌鞍俺埯铵揞犴岸按案胺暗黯肮昂盎凹坳敖嗷廒獒遨熬翱聱螯鳌鏖拗袄媪岙傲奥骜澳懊鏊 +八巴叭扒吧岜芭疤捌笆粑拔茇菝跋魃把钯靶坝爸罢鲅霸灞掰白百佰柏捭摆呗败拜稗扳班般颁斑搬瘢癍阪坂板版钣舨办半伴扮拌绊瓣邦帮梆浜绑榜膀蚌傍棒谤蒡磅镑勹包孢苞胞煲龅褒雹宝饱保鸨堡葆褓报抱豹趵鲍暴爆陂卑杯悲碑鹎北贝狈邶备背钡倍悖被惫焙辈碚蓓褙鞴鐾奔贲锛本苯畚坌笨崩绷嘣甭泵迸甏蹦逼荸鼻匕比吡妣彼秕俾笔舭鄙币必毕闭庇畀哔毖荜陛毙狴铋婢庳敝萆弼愎筚滗痹蓖裨跸辟弊碧箅蔽壁嬖篦薜避濞臂髀璧襞边砭笾编煸蝙鳊鞭贬扁窆匾碥褊卞弁忭汴苄拚便变缏遍辨辩辫灬杓彪标飑髟骠膘瘭镖飙飚镳表婊裱鳔憋鳖别蹩瘪宾彬傧斌滨缤槟镔濒豳摈殡膑髌鬓冫冰兵丙邴秉柄炳饼禀并病摒拨波玻剥钵饽啵脖菠播伯孛驳帛泊勃亳钹铂舶博渤鹁搏箔膊踣薄礴跛簸擘檗逋钸晡醭卜卟补哺捕不布步怖钚部埠瓿簿 ;package sorting;import java.util.*;import java.text.*;/* author GaoJianMin*/public class ChineseGB2312Comparator implements Comparator , Comparable private RuleBasedCollator GB2312Collator =ChineseGB2312Collator.getFixedGB2312Collator();private String str1;/* param str1*/public ChineseGB2312Comparator(String str1) this .str1 = str1;/*/public ChineseGB2312Comparator() this .str1= ;/* param str1* param str2* return an integer indicatint the comparison result* see java.util.Comparator#compare(Object, Object)*/public int compare(String str1, String str2) return GB2312Cpare(str1, str2);/* param str2* return an integer indicatint the comparison result* see java.lang.Comparable#compareTo(Object)*/public int compareTo(String str2) return GB2312Cpare(str1, str2);测试代码及结果代码:import java.util.*;import java.text.*;public class TestString test = new String 作业 ,测试 ,test ,我们 ,。空 ,镂空 , ,浏 ,皙;java.util.Arrays .sort

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论