前几天,朋友的项目中要用到中英文混合排序的功能,和我在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开发中经常遇到的问题。对Java集合中的某个字段按照中文拼音排序可以使用多种方法,本文将介绍两种常见的方法。 方法一:使用...
Java拼音搜索是一个在Java开发中常见的功能,尤其在构建搜索引擎或者中文输入法时,将汉字转化为拼音以便于处理和...开发者可以在这个基础上进一步扩展,如增加拼音排序、语音输入支持等功能,以满足不同场景下的需求。
// 汉字按拼音排序 if (pinyin1 == null || pinyin2 == null) { return o1.compareTo(o2); } return Arrays.stream(pinyin1).sorted().toString().compareTo(Arrays.stream(pinyin2).sorted().toString()); } ...
"Android中文按拼音排序"这个话题就是关于如何实现这样的功能。这篇博客(博文链接:https://gqdy365.iteye.com/blog/2002488)可能提供了详细的实现方法。 首先,我们要理解的是,中文字符本身并不直接携带拼音...
本示例"按拼音排序分组LIST"着重于展示如何在Android应用中实现一个列表(List),该列表中的元素按照汉字的拼音首字母从A到Z进行排序,并且用户可以点击每个字母来筛选显示相应首字母的数据。这个功能在很多应用...
这里我们将详细介绍如何使用`pinyin4j`这个Java库来实现中文字符串的拼音排序。 `pinyin4j`是一个强大的Java库,它提供了将汉字转换为拼音的功能,这使得我们可以基于每个汉字的拼音首字母来进行排序。以下是如何...
中文拼音排序是一种解决方案,它将汉字转换为对应的拼音,然后按照拼音的顺序进行排序。这个“中文拼音排序”项目利用了`pinyin4j`库来实现这一功能。 `pinyin4j`是一个强大的Java库,专门用于处理中文字符的拼音...
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拼音解析.zip"这个压缩包提供的核心是`pinyin4j-2.5.0.jar`库,它是一个强大的Java库,专门用于汉字到拼音的转换。以下是对这个库及其应用的详细解释。 `pinyin4j`是由Barry DeZeng开发的一个开源项目,它的...
这个功能不仅涉及到中文的拼音排序,还可能涉及到中文笔划排序,甚至英文排序。下面将详细介绍这些排序方法及其在Android开发中的应用。 **一、中文拼音排序** 中文拼音排序是基于汉字的拼音首字母进行排序,适用...
在IT领域,尤其是在编程和数据处理中,对汉字进行按拼音排序是一项常见的需求。这个任务主要涉及汉字与拼音之间的转换以及排序算法的应用。标题“软件实现汉字按拼音排序”所指的知识点主要包括以下几部分: 1. **...
通过创建一个 `RuleBasedCollator` 的实例并设置为中文环境,可以实现按照中文拼音排序的功能。 以上三个知识点总结了关于 Java 排序的一些基本应用,包括基础的冒泡排序算法、使用标准库 `Collections.sort()` ...
标题“SQL按拼音首字母排序”以及描述中的关键词“SQL按拼音排序”,指向了一种特殊的数据排序需求:在数据库中,针对包含中文字符的字段,按照中文拼音的首字母进行排序。这在处理大量含有中文名称、地点等信息的...
例如,我们可以创建一个`Person`类,包含姓名、薪水和年龄等属性,然后创建一个根据姓名拼音排序的`Comparator`: ```java import java.util.Comparator; import java.util.List; import java.util.ArrayList; ...
在中文环境下,一个常见的需求是按照汉字的拼音首字母进行排序,这被称为“拼音排序”。本篇文章将深入探讨如何在Android应用中实现这样一个功能,并提供一个公共类`PinyinSort`的详细解释。 首先,我们要理解汉字...
在Java编程中,有时我们需要将汉字转换为对应的拼音,以便进行特定的处理,如关键词搜索、数据排序等。"Java名字获取拼音"这个主题就是关于如何在Java中实现这一功能。这里我们将深入探讨如何利用开源库pinyin4j来...
本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[]...
"按姓氏拼音排序.rar" 提供的场景是将人员名单按照中文姓氏的拼音顺序进行排列。这个主题涉及到中文字符编码、拼音转换以及排序算法等多个知识点。 首先,中文字符在计算机中的表示通常采用Unicode编码,比如常用的...
### JAVA通过数组按首字母排序 在Java编程语言中,对字符串数组进行排序是一个常见的操作。本篇文章将详细介绍如何利用Java内置的`Arrays.sort()`方法按照字符串的首字母进行排序,以及如何处理大小写敏感性问题。 ...