怎么对中文排序? String[] name={"zzz","aaa","我们","你好","++",};要求按ascii表顺序排,中文转换成对应的汉语拼音来排,这样莫非要弄张表记录所有中文对应的拼音吗?有其他办法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static void main(String[] args) { // Collator 类是用来执行区分语言环境的 String 比较的,这里选择使用CHINA Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); String[] arr = {"张三", "李四", "王五", "刘六"}; // 使根据指定比较器产生的顺序对指定对象数组进行排序。 Arrays.sort(arr, cmp); for (int i = 0; i < arr.length; i++) System.out.println(arr[i]); System.out.println(); } http://blog.csdn.net/dada9407/archive/2008/09/25/2975622.aspx关键字:java,排序,中文,pinyin4j,笔画,GBK,GB2312,拼音,代码点1 问题提出汉字排序不同于英文字母的排序,主要有两种排序方式:一种是按拼音首字母排序;一种是按笔画排序。大多数情况下是按拼音首字母排序。那汉字究竟怎样通过其拼音首字母排序呢?好在字符集帮我们解决了这个问题。众所周知的包含汉字的字符集有gb2312和GBK,后者是前者的扩展。Gb2312在设计的时候就将常用的中国汉字按照拼音的顺序包含到字符集中,因此,我们通过汉字的字符编码就可以判断汉字的拼音顺序。因为GBK是gb2312的扩展,对gb2312完全兼容,只是在gb2312的字符集末尾加入了二次常用汉字,所以GBK字符集也可以通过这种方法实现拼音排序。2 问题解决Java运行时的编码是Unicode编码,所有的字符集都要转化成Unicode编码,所以,可以很方便的对gb2312和GBK字符集的汉字实现拼音排序。测试代码如下:public class NormalComparator implements Comparator<Object> { RuleBasedCollator collator = (RuleBasedCollator)Collator.getInstance(Locale.CHINA); public int compare(Object o1, Object o2) { // TODO Auto-generated method stub return collator.compare(o1.toString(), o2.toString()); }}代码说明:Collator 类是执行区分语言环境的 String 比较,可以使用静态工厂方法 getInstance 来为给定的语言环境获得适当的Collator 对象。如Collator.getInstance(Local.CHINA)是获得中国语言的Collator对象。RuleBasedCollator 是Collator的子类,它实现了特定整理策略的细节或者需要修改策略。为了提高效率,对 RuleBasedCollator 做了如下限制(其他子类可以用于更复杂的语言): l 如果指定了由 <modifier> 控制的特殊整理规则,则它将用于整个 collator 对象。 l 所有未指定的字符位于整理顺序的末尾。 整理表由一组整理规则组成,其中每个规则是以下三种形式之一: <modifier><relation> <text-argument><reset> <text-argument>规则元素的定义如下: l 文本参数:文本参数可以是任何的字符序列,不包括特殊字符(即公共空白字符 [0009-000D、0020] 和规则语法字符 [0021-002F、003A-0040、005B-0060、007B-007E])。如果需要使用这些字符,可以把它们放在单引号内(例如 & => '&')。注意,没有使用引号的空白字符将被忽略;例如 b c 视为 bc。 l 修饰符:目前有两个修饰符用于开启特殊的整理规则。 '@' : 开启重音字符的反向排序(二级区别),以法语为例。 '!' : 开启 Thai/Lao 元音-辅音字母交换。如果当 \U0E40-\U0E44 范围内的 Thai 元音字母排在 \U0E01-\U0E2E 范围内的 Thai 辅音字母前面,或者 \U0EC0-\U0EC4 范围内的 Lao 元音字母排在 \U0E81-\U0EAE 范围内的 Lao 辅音字母前面时此规则有效,那么经过整理后元音字母将被放置在辅音字母的后面。 '@' : 指示重音字符按反向排序,以法语为例。 l 关系:关系如下: '<' : 大于,当字母不同时(一级) ';' : 大于,当重音不同时(二级) ',' : 大于,当大小写不同时(三级) '=' : 等于 l 重置:存在单一的重置主要用于规则集的缩减和扩充,但它也可以用于在规则集的末尾添加修改。 '&' : 指示下一条规则在重置文本参数将要被排序的位置后面。通过RuleBasedCollator类,我们可以对已有的整理规则进行修改,如:String rule = “<a<b<f<g”;String addrule = “&b<e”;本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dada9407/archive/2008/09/25/2975622.aspx 折腾一天了,指导一下 JDBC连接不上SQL2005 问个关于线程安全两种单例写法优略的问题 nod32的使用 jar 包class动态加载问题 ,请高手指教 ! 几个基础的问题... 我在局域网中无法使用flashget,无法登陆联众游戏平台,在线求助,高分奉送!!!! 求教,JAVA写的发送邮件的程序能不能 用JMAIL邮件服务器发送?我在线等!谢谢 救救我——JAVA电子白板呀…… 一极菜的问题!我的程序运行完之后,输出一段表达式,如何从屏幕取得该完整的表达式?谢谢!! JSTL和<%%>的效率比较 看一下这个聊天applet的服务端代码。有几个问题,有重谢(80分)。本人菜鸟多谢了。
// Collator 类是用来执行区分语言环境的 String 比较的,这里选择使用CHINA
Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
String[] arr = {"张三", "李四", "王五", "刘六"};
// 使根据指定比较器产生的顺序对指定对象数组进行排序。
Arrays.sort(arr, cmp);
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
System.out.println();
}
关键字:java,排序,中文,pinyin4j,笔画,GBK,GB2312,拼音,代码点1 问题提出
汉字排序不同于英文字母的排序,主要有两种排序方式:一种是按拼音首字母排序;一种是按笔画排序。大多数情况下是按拼音首字母排序。那汉字究竟怎样通过其拼音首字母排序呢?好在字符集帮我们解决了这个问题。众所周知的包含汉字的字符集有gb2312和GBK,后者是前者的扩展。Gb2312在设计的时候就将常用的中国汉字按照拼音的顺序包含到字符集中,因此,我们通过汉字的字符编码就可以判断汉字的拼音顺序。因为GBK是gb2312的扩展,对gb2312完全兼容,只是在gb2312的字符集末尾加入了二次常用汉字,所以GBK字符集也可以通过这种方法实现拼音排序。2 问题解决
Java运行时的编码是Unicode编码,所有的字符集都要转化成Unicode编码,所以,可以很方便的对gb2312和GBK字符集的汉字实现拼音排序。测试代码如下:public class NormalComparator implements Comparator<Object> { RuleBasedCollator collator = (RuleBasedCollator)Collator.getInstance(Locale.CHINA); public int compare(Object o1, Object o2) { // TODO Auto-generated method stub return collator.compare(o1.toString(), o2.toString()); }}代码说明:Collator 类是执行区分语言环境的 String 比较,可以使用静态工厂方法 getInstance 来为给定的语言环境获得适当的Collator 对象。如Collator.getInstance(Local.CHINA)是获得中国语言的Collator对象。RuleBasedCollator 是Collator的子类,它实现了特定整理策略的细节或者需要修改策略。为了提高效率,对 RuleBasedCollator 做了如下限制(其他子类可以用于更复杂的语言): l 如果指定了由 <modifier> 控制的特殊整理规则,则它将用于整个 collator 对象。 l 所有未指定的字符位于整理顺序的末尾。 整理表由一组整理规则组成,其中每个规则是以下三种形式之一: <modifier><relation> <text-argument><reset> <text-argument>规则元素的定义如下: l 文本参数:文本参数可以是任何的字符序列,不包括特殊字符(即公共空白字符 [0009-000D、0020] 和规则语法字符 [0021-002F、003A-0040、005B-0060、007B-007E])。如果需要使用这些字符,可以把它们放在单引号内(例如 & => '&')。注意,没有使用引号的空白字符将被忽略;例如 b c 视为 bc。 l 修饰符:目前有两个修饰符用于开启特殊的整理规则。 '@' : 开启重音字符的反向排序(二级区别),以法语为例。 '!' : 开启 Thai/Lao 元音-辅音字母交换。如果当 \U0E40-\U0E44 范围内的 Thai 元音字母排在 \U0E01-\U0E2E 范围内的 Thai 辅音字母前面,或者 \U0EC0-\U0EC4 范围内的 Lao 元音字母排在 \U0E81-\U0EAE 范围内的 Lao 辅音字母前面时此规则有效,那么经过整理后元音字母将被放置在辅音字母的后面。 '@' : 指示重音字符按反向排序,以法语为例。 l 关系:关系如下: '<' : 大于,当字母不同时(一级) ';' : 大于,当重音不同时(二级) ',' : 大于,当大小写不同时(三级) '=' : 等于 l 重置:存在单一的重置主要用于规则集的缩减和扩充,但它也可以用于在规则集的末尾添加修改。 '&' : 指示下一条规则在重置文本参数将要被排序的位置后面。通过RuleBasedCollator类,我们可以对已有的整理规则进行修改,如:String rule = “<a<b<f<g”;String addrule = “&b<e”;本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dada9407/archive/2008/09/25/2975622.aspx