pinyin4j:拼音与汉字的转换实例
Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。
官网: http://pinyin4j.sourceforge.net/
有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“cmd”,即“曹孟德”三个汉字的拼音“caomengde”各字的首字母。但是怎样才能将“曹孟德”翻译成“caomengde”呢?很简单的办法就是建立一个大的对照表(比如用关联容器Map),比如<”曹”,”cao”>,<” 孟”,”meng”>,<” 德”,”de”>…但这样的做法,需要维护好一个比较大的对照表,同时一个汉字可能有多个发音,也就是说Map这样的容器时不行的,因为其<key,value>必须是一一对应的。在C++中可以用STL里面的multimap来解决这个问题,但Java中没有类似multimap这样的东西,除非自己实现一个。
Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大:
+ 支持同一汉字有多个发音
+ 还支持拼音的格式化输出,比如第几声之类的,
+ 同时支持简体中文、繁体中文转换为拼音
………
参考文字:
http://blog.csdn.net/pathuang68/article/details/6692882
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.BadHanyuPinyinOutputFormatCombination;public class Pinyin4jDemo1 {public static void main(String[] args) {System.out.println( covertCnNameToPinyin("2222燕22ww"));System.out.println( covertCnNameToPinyin("燕燕燕燕燕燕燕燕","?"));System.out.println(covertCnStringToPinyin("2222燕22ww燕燕**燕燕"));}/*** 转换字符串中汉字为拼音,除汉字外的原样输出* @param cnName*/public static String covertCnNameToPinyin(String cnName){HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);String ret="";if(cnName != null && cnName.length()>0){for(int i = 0 ;i<cnName.length();i++){String[] pinyinArray = null;try{char idxcnNameChar = cnName.charAt(i);pinyinArray = PinyinHelper.toHanyuPinyinStringArray(idxcnNameChar, outputFormat);if(pinyinArray == null){pinyinArray = new String[]{String.valueOf(idxcnNameChar)};String outputString = concatPinyinStringArray(pinyinArray);ret = ret + outputString;}else{String outputString = concatPinyinStringArray(pinyinArray);if(i==0)ret = outputString+" ";else ret = ret + outputString;}} catch (BadHanyuPinyinOutputFormatCombination e1){e1.printStackTrace();} }} return ret; }/*** 转换字符串中汉字为拼音,除汉字外的原样输出,可添加分隔符* @param cnName*/public static String covertCnNameToPinyin(String cnName,String delimiter){HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);String ret="";if(cnName != null && cnName.length()>0){for(int i = 0 ;i<cnName.length();i++){String[] pinyinArray = null;try{char idxcnNameChar = cnName.charAt(i);pinyinArray = PinyinHelper.toHanyuPinyinStringArray(idxcnNameChar, outputFormat);if(pinyinArray == null){pinyinArray = new String[]{String.valueOf(idxcnNameChar)};String outputString = concatPinyinStringArray(pinyinArray);ret = ret + outputString;}else{String outputString = concatPinyinStringArray(pinyinArray);if(i==0)ret = outputString+delimiter;else ret = ret + outputString;}} catch (BadHanyuPinyinOutputFormatCombination e1){e1.printStackTrace();}}}return ret;}/*** 转换汉字为拼音,非汉字的字符清除* @param cnName*/public static String covertCnStringToPinyin(String cnName){HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);String ret="";if(cnName != null && cnName.length()>0){for(int i = 0 ;i<cnName.length();i++){String[] pinyinArray = null;try{pinyinArray = PinyinHelper.toHanyuPinyinStringArray(cnName.charAt(i), outputFormat);} catch (BadHanyuPinyinOutputFormatCombination e1){e1.printStackTrace();}String outputString = concatPinyinStringArray(pinyinArray);ret = ret + outputString;}}return ret;}@SuppressWarnings("unused")private static String concatPinyinStringArray(String[] pinyinArray){StringBuffer pinyinStrBuf = new StringBuffer();if ((null != pinyinArray) && (pinyinArray.length > 0)){for (int i = 0; i < pinyinArray.length; i++){pinyinStrBuf.append(pinyinArray[i]);break;// pinyinStrBuf.append(System.getProperty("line.separator"));}}String outputString = pinyinStrBuf.toString();return outputString;}
}
pinyin4j:拼音与汉字的转换实例相关推荐
- VB 汉字字符串转换成拼音
以下这个函数可以将一个汉字字符串转换成拼音 Private Function Getpy(Txt) Dim d, TmpTxt Dim wzcode, i, TmpWZ, a, b, ii Set d ...
- java中汉字自动转换成拼音
刚刚做完这样一个功能: 这是页面上的一小部分,主要是给选择的课程添加英文名称(约定是课程拼音的首字母组合),以方便后面其他操作.这个文本框实现起来还是需要不少控制的,需要异步查询.异步添加.需要js控 ...
- java 拼音转汉字_Java通过pinyin4j实现汉字转拼音
package com.zxy.timecard.utils; import net.sourceforge.pinyin4j.PinyinHelper; /** * 拼音工具类 * @author ...
- 探索PinYin4j.jar将汉字转换为拼音的基本用法
将汉字转换为拼音在Android开发中是个很常见的问题.例如:在android手机应用开发中,要查询联系人的姓名,通常都是用拼音进行查询的. Pinyin4j是一个功能强悍的汉语拼音工具包,是sour ...
- 如何实现拼音与汉字的互相转换
如何实现拼音与汉字的互相转换 发表于2个月前(2016-02-16 15:01) 阅读(58) | 评论(0) 6人收藏此文章, 我要收藏 赞0 4月23日,武汉源创会火热报名中,期待您的参与&g ...
- java实现汉字文字转换拼音(全拼和简拼)工具包
java实现汉字文字转换拼音(全拼和简拼)工具包 话不多说,直接上代码,调用即可 /** * 得到 全拼 * @param str * @return */public static String g ...
- 汉字拼音计算机,拼音_汉字计算机自动转换系统
拼音_汉字计算机自动转换系统 夕 年一 月 计 算 机 学 报 第 ! 期 拼音汉 字计算机自动转换系统 凌潘 云杨长 生江大浙学计算机#系 . . % & ( )丫 ) +, ( . %(/ ...
- 汉字文章转换拼音的好工具 pinyinConvert.v20120709
汉字文章转换拼音的好工具 pinyinConvert.v20120709 ..适合于对汉字不太熟悉的人员,如小孩子,外国人,外族人等. ---------------原文------------ 分析 ...
- solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
今天思考实现了下字符加汉字的搜索建议的 实现--思想主要还是昨天的思想,不过这个方法使用的是匹配查询 ,查询速度可能不太理想 /*** * @描述:用于完成拼音加汉字 组合情况的搜索建议 ---尽量少 ...
最新文章
- boost::sort模块实现使用不区分大小写的字符串键对结构进行排序的示例
- C++ 生成洛伦兹的蝴蝶
- 《MySQL——索引笔记》
- 如何利用DTS数据同步功能,快速创建数据同步作业
- java listview用法_Java ListView.setMultiChoiceModeListener方法代码示例
- H7-TOOL | 以太网 - 动态IP(DHCP)功能测试
- xml 导入SQL Server 2005
- Linux命令解释之sudo
- IT人士十大不良饮食习惯及改进建议
- 艾宾浩斯遗忘曲线复习计划表Excel下载
- linux终端快捷键(持续更新)
- 多媒体计算机辅助英语教学,多媒体计算机辅助英语教学初探
- HDU - 2567 寻梦
- Mac Mounty挂载NTFS硬盘报错
- 那些你可能不知道的微信奇技淫巧
- 微信语音转文字的体验报告
- Https证书浏览器红色警告解决
- 推荐六款图片素材网站
- mysql下镜像安装教程_mysql的下载和安装详细教程(windows)
- 知乎里怎么看个人简介_如何做一份优秀的简历?