package test;
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.exception.BadHanyuPinyinOutputFormatCombination;
/**
* @className:PinyingUtil.java
* @classDescription:拼音操作工具类
* @author:xiayingjie
* @createTime:2010-10-21
*/
public class PinyinUtil {
/**
* 将字符串转换成拼音数组
*
* @param src
* @return
*/
public static String[] stringToPinyin(String src) {
return stringToPinyin(src, false, null);
}
/**
* 将字符串转换成拼音数组
*
* @param src
* @return
*/
public static String[] stringToPinyin(String src,String separator) {
return stringToPinyin(src, true, separator);
}
/**
* 将字符串转换成拼音数组
*
* @param src
* @param isPolyphone
* 是否查出多音字的所有拼音
* @param separator
* 多音字拼音之间的分隔符
* @return
*/
public static String[] stringToPinyin(String src, boolean isPolyphone,
String separator) {
// 判断字符串是否为空
if ("".equals(src) || null == src) {
return null;
}
char[] srcChar = src.toCharArray();
int srcCount = srcChar.length;
String[] srcStr = new String[srcCount];
for (int i = 0; i < srcCount; i++) {
srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);
}
return srcStr;
}
/**
* 将单个字符转换成拼音
*
* @param src
* @return
*/
public static String charToPinyin(char src, boolean isPolyphone,
String separator) {
// 创建汉语拼音处理类
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 输出设置,大小写,音标方式
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
StringBuffer tempPinying = new StringBuffer();
// 如果是中文
if (src > 128) {
try {
// 转换得出结果
String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,
defaultFormat);
// 是否查出多音字,默认是查出多音字的第一个字符
if (isPolyphone && null != separator) {
for (int i = 0; i < strs.length; i++) {
tempPinying.append(strs[i]);
if (strs.length != (i + 1)) {
// 多音字之间用特殊符号间隔起来
tempPinying.append(separator);
}
}
} else {
tempPinying.append(strs[0]);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
tempPinying.append(src);
}
return tempPinying.toString();
}
public static String hanziToPinyin(String hanzi){
return hanziToPinyin(hanzi," ");
}
/**
* 将汉字转换成拼音
* @param hanzi
* @param separator
* @return
*/
@SuppressWarnings("deprecation")
public static String hanziToPinyin(String hanzi,String separator){
// 创建汉语拼音处理类
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 输出设置,大小写,音标方式
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
String pinyingStr="";
try {
pinyingStr=PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, separator);
} catch (BadHanyuPinyinOutputFormatCombination e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pinyingStr;
}
/**
* 将字符串数组转换成字符串
* @param str
* @param separator 各个字符串之间的分隔符
* @return
*/
public static String stringArrayToString(String[] str, String separator) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length; i++) {
sb.append(str[i]);
if (str.length != (i + 1)) {
sb.append(separator);
}
}
return sb.toString();
}
/**
* 简单的将各个字符数组之间连接起来
* @param str
* @return
*/
public static String stringArrayToString(String[] str){
return stringArrayToString(str,"");
}
/**
* 将字符数组转换成字符串
* @param str
* @param separator 各个字符串之间的分隔符
* @return
*/
public static String charArrayToString(char[] ch, String separator) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < ch.length; i++) {
sb.append(ch[i]);
if (ch.length != (i + 1)) {
sb.append(separator);
}
}
return sb.toString();
}
/**
* 将字符数组转换成字符串
* @param str
* @return
*/
public static String charArrayToString(char[] ch) {
return charArrayToString(ch," ");
}
/**
* 取汉字的首字母
* @param src
* @param isCapital 是否是大写
* @return
*/
public static char[] getHeadByChar(char src,boolean isCapital){
//如果不是汉字直接返回
if (src <= 128) {
return new char[]{src};
}
//获取所有的拼音
String []pinyingStr=PinyinHelper.toHanyuPinyinStringArray(src);
//创建返回对象
int polyphoneSize=pinyingStr.length;
char [] headChars=new char[polyphoneSize];
int i=0;
//截取首字符
for(String s:pinyingStr){
char headChar=s.charAt(0);
//首字母是否大写,默认是小写
if(isCapital){
headChars[i]=Character.toUpperCase(headChar);
}else{
headChars[i]=headChar;
}
i++;
}
return headChars;
}
/**
* 取汉字的首字母(默认是大写)
* @param src
* @return
*/
public static char[] getHeadByChar(char src){
return getHeadByChar(src,true);
}
/**
* 查找字符串首字母
* @param src
* @return
*/
public static String[] getHeadByString(String src){
return getHeadByString( src, true);
}
/**
* 查找字符串首字母
* @param src
* @param isCapital 是否大写
* @return
*/
public static String[] getHeadByString(String src,boolean isCapital){
return getHeadByString( src, isCapital,null);
}
/**
* 查找字符串首字母
* @param src
* @param isCapital 是否大写
* @param separator 分隔符
* @return
*/
public static String[] getHeadByString(String src,boolean isCapital,String separator){
char[]chars=src.toCharArray();
String[] headString=new String[chars.length];
int i=0;
for(char ch:chars){
char[]chs=getHeadByChar(ch,isCapital);
StringBuffer sb=new StringBuffer();
if(null!=separator){
int j=1;
for(char ch1:chs){
sb.append(ch1);
if(j!=chs.length){
sb.append(separator);
}
j++;
}
}else{
sb.append(chs[0]);
}
headString[i]=sb.toString();
i++;
}
return headString;
}
public static void main(String[] args) {
System.out.println(PinyinUtil.stringArrayToString(getHeadByString("我的心肝爱上"),"-"));
}
}
上面这个pinyinUtil类是pinyin4j包中的一个工具类,有多种方法供大家使用。
User类,相信不用再贴出来了,大家懂的。。。
下面这个类是实现排序的类了。
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class HanZiSort {
public static void main(String[] args) {
List<User> list=new ArrayList<User>();
User u=new User();
u.setName("张三");
u.setAge(21);
list.add(u);
u=new User();
u.setName("李四");
u.setAge(18);
list.add(u);
u=new User();
u.setName("王五");
u.setAge(25);
list.add(u);
u=new User();
u.setName("寒子");
u.setAge(89);
list.add(u);
for(User user: list) {
System.out.println(PinyinUtil.hanziToPinyin(user.getName()));
}
Collections.sort(list, new ToSort());//new ToSort() 根据需求定义排序
System.out.println("排序后!!!!!!!!!");
for(User user: list) {
System.out.println(PinyinUtil.hanziToPinyin(user.getName()));
}
}
}
//排序
class ToSort implements Comparator<User> {
@Override
public int compare(User o1, User o2) {
// TODO Auto-generated method stub
String s1=PinyinUtil.hanziToPinyin(o1.getName());
String s2=PinyinUtil.hanziToPinyin(o2.getName());
if(s1.compareTo(s2)>0) {
return 1;
} else {
return -1;
}
}
}
结果:
zhang san
li si
wang wu
han zi
排序后!!!!!!!!!
han zi
li si
wang wu
zhang san
pinyin4j包在附件中。
分享到:
相关推荐
以下是如何使用`pinyin4j`进行中文排序的详细步骤: 1. **添加依赖**:首先,你需要在项目中引入`pinyin4j`库。如果你的项目是Maven项目,可以在`pom.xml`文件中添加如下依赖: ```xml <groupId>...
《Java源码解析:pinyin4j中文转拼音库》 在Java开发中,处理中文字符,特别是将中文转换为拼音的需求广泛存在。pinyin4j是一个经典的Java库,专门用于实现这一功能。这个库简单易用,适用于各种场景,如搜索引擎...
《中文转拼音工具类——pinyin4j-2.5.0.jar 在处理地址与人名中的应用》 在处理中文数据时,有时我们需要将汉字...通过合理利用pinyin4j提供的API,开发者可以极大地提高工作效率,简化涉及中文拼音转换的项目开发。
总的来说,"java拼音搜索pinyin4j"这个项目结合了Java Web开发的基础知识和汉字拼音处理的专业工具,通过Servlet三层架构实现了一个高效的中文搜索功能。开发者可以在这个基础上进一步扩展,如增加拼音排序、语音...
《pinyin4j-2.5.0.jar:Java实现汉字转拼音的高效工具》 在信息化时代,处理中文字符成为许多开发者的必备技能。在Java编程语言中,pinyin4j是一个非常实用的库,它能将汉字转换为拼音,从而解决了在处理汉字排序、...
使用pinyin4j进行汉字转拼音的步骤大致如下: 1. **设置输出格式**: 通过`HanyuPinyinOutputFormat`类,我们可以设置拼音的输出形式。例如,`format.setCaseType(HanyuPinyinCaseType.LOWERCASE)`将所有拼音转换...
《Java中的中文转拼音库——Pinyin4j详解》 在Java编程中,处理中文字符时,有时我们需要将中文转化为拼音,以便进行后续的文本处理或搜索操作。Pinyin4j是一个广泛使用的Java库,专门用于实现这个功能。本文将详细...
`pinyin4j`是由Barry Zhang开发的一个开源项目,它提供了一套简洁的API,使得在Java或Android项目中集成汉字转拼音功能变得简单。该库不仅适用于标准Java环境,还兼容Android平台,因此在移动开发中也十分适用。 要...
总的来说,Pinyin4j是一个功能强大且易于使用的汉字转拼音工具,无论是Java还是Android开发者,都能从中受益。通过它的帮助,我们可以更便捷地进行汉字与拼音之间的转换,进一步推动中文信息处理技术的发展。在实际...
一旦pinyin4j库被正确地引入,你就可以使用压缩包提供的汉字转拼音类。这个类可能已经封装了pinyin4j的核心功能,如`HanyuPinyinHelper`或类似的类名,提供了简单易用的接口,如`toPinyin()`或`getPinyin()`方法,...
总之,`pinyin4j-2.5.0`包是Java开发人员处理中文转拼音问题的得力工具,通过其丰富的功能和简单的API,可以轻松地集成到各种项目中,提高开发效率。理解和熟练使用这个库,对于提升Java应用在处理中文内容时的灵活...
《使用pinyin4j进行汉字拼音排序的深度解析》 在中文信息处理中,有时候我们需要对汉字进行排序,而按照汉字本身的顺序排列可能并不符合我们的实际需求,这时,我们可以利用汉字的拼音首字母进行排序,使得排序结果...
总的来说,`pinyin4j-2.5.0`是Java开发者处理中文字符串拼音转换的理想选择。无论是简单的拼音获取,还是复杂的多音字处理,它都能提供强大而便捷的支持。通过理解和掌握这个库,可以极大地提升我们的开发效率,让...
一种常见的方式是使用第三方库,如`pinyin4j`,它可以帮助我们将中文字符转换为拼音。 以下是使用`pinyin4j`库实现的示例代码: ```java import net.sourceforge.pinyin4j.PinyinHelper; import ...
4. 辅助功能:除了基本的汉字转拼音,pinyin4j还提供了诸如拼音比较、拼音排序等辅助工具,方便开发者在处理拼音数据时进行操作。 三、使用方法 1. 引入库:首先,需要在项目中引入pinyin4j的JAR包,可以通过Maven...
《使用pinyin4j进行Java拼音处理》 在Java编程中,处理汉字转换为拼音的需求时常出现,特别是在信息检索、关键词提取、文本分析等领域。这时,一个强大的库——pinyin4j,便能发挥出其独特的作用。pinyin4j是一款...
总的来说,“pinyin4j拼音码获取”这一主题是Java开发中处理汉字拼音转换的关键技术,学习并掌握它有助于开发者在处理中文字符时更加游刃有余。在实际开发中,结合pinyin4j的特性,可以有效地解决与汉字拼音相关的...
"pinyin4j-2.5.0.jar"就是这样一款高效且易用的工具,它专为Java和Kotlin设计,提供了强大的汉字转拼音功能。 pinyin4j是一款开源的Java库,由Barry De Zwart开发,其主要功能是将汉字转换为汉语拼音。这个库不仅...
Pinyin4j是一个Java库,主要用于将汉字转换为拼音,这对于进行基于拼音的搜索和排序非常有用。pinyinAnalyzer是Lucene的一个分析器,它利用了Pinyin4j的功能,能够将输入的中文文本分词并转化为拼音形式,以便于...
《pinyin4j-2.5.0.jar与PinyinUtils.java:Java汉字转拼音的高效工具》 在Java开发中,处理汉字转拼音的需求时常出现,例如在搜索引擎优化、关键词提取、排序等方面。这时,一个高效且易用的库就显得尤为重要。...