前几天,朋友的项目中要用到中英文混合排序的功能,和我在MSN上讨论实现方法.
恰逢端午节放假,我闲来无事,就把解决方法捣鼓出来了,希望能派上用场.
这是完整代码的下载地址:
http://download.csdn.net/source/1362450
一共有三个类:PinyinComparator的作用是实现Comparator接口,PingYinUtil的作用是将汉字转化为拼音.Test是测试类,用于观看演示实际效果.
这是目录结构:
1.先看用作演示的Test类,这个类仅供测试用.
package pinyin;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
publicvoidsort() {
// 数组排序
String[] array = {"xyz中abc-中国","xyz中abc-美国"}
;
List list1 =Arrays.asList(array);
Arrays.sort(array,newPinyinComparator());
System.out.println(list1);
// 集合排序
List list2 =newArrayList();
list2.add("张一");
list2.add("张二");
Collections.sort(list2,newPinyinComparator());
System.out.println(list2);
}
public staticvoidmain(String[] args) {
newTest().sort();
}
}
在这里,Arrays.sort()实现了对数组的排序,Collections.sort()实现了对集合的排序.
在实际应用中,用得更多的可能是对集合的排序.
运行结果如下:
中国与美国相比,前面那一串("xyz中abc-")都一样,都是带把儿的,但m在z前面,所以中国和美国还有些差距.
"张一"的全拼是"zhangyi","张二"是"zhanger",e在y的前面,所以张二排在前面.
论大小,老大比老二牛;但要"拼淫",老二却排在老大的前面.
2.PinyinComparator,这个是具体实现比较的类,他比较的是汉语拼音,而不是汉字.
package pinyin;import java.util.Comparator;
/**
*拼音比较器
*
* @author 龚刚
*
*/
public class PinyinComparator implementsComparator<
Object>
{
publicintcompare(Object o1,Object o2) {
String str1 = PingYinUtil.getPingYin((String) o1);
String str2 = PingYinUtil.getPingYin((String) o2);
return str1.compareTo(str2);
}
}
修改这个类,就可以实现其他的排序算法.比如按笔画排序.
不过还是按拼音排序用得广泛.
只有某些官样文章,或几百万个专家合作编著的十几页的小册子,才按笔画排序.
3.PingYinUtil,这个类中采用了开源组件pinyin4j.
pinyin4j的官网,在sourceforge上:
http://pinyin4j.sourceforge.net
话说浙江大学的牛人还真多啊,前不久用的什么linux下的多线程下载工具(虽然用着不满意),好像也是浙大的开发的.
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.
HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.*;
/**
* 拼音工具类
*
* @author 龚刚
*/
public class PingYinUtil {
/**
* 将字符串中的中文转化为拼音,其他字符不变
*
* @param inputString
* @return
*/
public staticStringgetPingYin(String inputString) {
HanyuPinyinOutputFormat format =new
HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
char[] input = inputString.trim().toCharArray();
String output ="";
try{
for(int i =0; i < input.length; i++) {
if(java.lang.Character.toString(input[i]).
matches("[\\u4E00-\\u9FA5]+")) {
String[] temp = PinyinHelper.
toHanyuPinyinStringArray(input[i],
format);
output += temp[0];
}else
output += java.lang.Character.toString(
input[i]);
}
}catch(BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return output;
}
}
解释一下代码:
(1).HanyuPinyinOutputFormat,定义汉语拼音的输出形式.
(2).HanyuPinyinCaseType,定义汉语拼音的大小写,如:
LOWERCASE min2
UPPERCASE MIN2
(3).HanyuPinyinToneType,定义音调的显示方式.如:
WITH_TONE_MARK dǎ ,带音调
WITH_TONE_NUMBER da3 ,带音调,用12345表示平上去入和轻声
WITHOUT_TONE da ,不带音调
(4).HanyuPinyinVCharType,定义'ü' 的显示方式.如:
WITH_U_AND_COLON u: ,u加两点表示,如律师表示为lu:shi
WITH_V v ,用字母v表示,这个用搜狗输入法的人想必有些印象.
WITH_U_UNICODE ü
(5).input[i]).matches("[\\u4E00-\\u9FA5]+"),这个用来判断是否为中文的.
(6).PinyinHelper.toHanyuPinyinStringArray(input[i], format),这个返回单字的拼音字符串数组.
如果音调类型为WITH_TONE_NUMBER的话,"张",将返回"zhang1","李",会返回"li4".
http://javafun.yo2.cn/pinyin4j.html
相关推荐
java集合某个字段按照中文拼音排序 java集合某个字段按照中文拼音排序
java实现中文排序,按数字字母汉字的顺序进行排序
实现按拼音排序... 按A到Z,可点击选择~.. 详情看效果~
4. * 汉字按照拼音排序的比较器 5. * @author KennyLee 2009-2-23 10:08:59 6. * 7. */ 8.public class PinyinComparator implements Comparator<Object> { 9. public int compare(Object o1, Object o2) { 10...
java的拼音解析,用于java开发对,汉字按拼音首字母排序,识别汉字并以拼音形式展现等
主要是对java中将汉字按照拼音排序的实现代码进行了详细的分析介绍。需要的朋友可以过来参考下,希望对大家有所帮助
sql按拼音首字母排序,sql按拼音排序
使用pinyin4j制作的一个简单的中文拼音排序
本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[]...
chineseandpinyin 是一个 Java 的类库,实现了汉字转拼音的功能。 目前2.0.0版已经Release,主要功能有: ... 实现小巧严谨的拼音排序,中英混合排序. 更多详情请见:http://51isunshine.github.io/chineseandpinyin/
今天在代码中用到了对中文按照拼音排序,咨询了群里面的大神后得到了下面的代码: var arr = ["张三","李四","王五","阿三"]; [removed](arr+" "); arr.sort(function(a,b){ return a.localeCompare(b); }); ...
通过里面的工具类,可以方便的进行拼音,笔画排序,并且对java的排序类进行了修复,可以精确的对UTF-8所支持的所有汉字排序。
主要介绍了Java实现按中文首字母排序的具体实例,有需要的朋友可以参考一下
MySQL常规排序、自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序。 下面给出3种比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 DESC倒叙 — 此处不用多讲 2....
PinyinHelper.convertToPinyinString(str,"",PinyinFormat.WITHOUT_TONE)输出拼音不包含声调 PinyinHelper.getShortPinyin(str) 获得简拼 PinyinHelper.convertToPinyinString(str,",",PinyinFormat.WITH_TONE_...
JavaScript对文字按照拼音排序</title>[removed]function defaultSort(){var a=”zhongguo,daguo,世界,中国,超级大国”;a=a.split(“,”);a.sort();alert(a);}function cusSort(){var a=”zhongguo,...
基于Java实现的短语搜索,支持公司名称、地址名称等短语的搜索,支持自定义排序、拼音处理,内置jetty提供web接口 使用方法: cd phrase-search unix类操作系统执行: chmod +x startup.sh & ./startup.sh ...
一经测试能将所有汉字转换为拼音,并可以使用它将汉字进行拼音排序!
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...