1. 简单介绍

有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“cmd”,即“曹孟德”三个汉字的拼音“caomengde”各字的首字母。但是怎样才能将“曹孟德”翻译成“caomengde”呢?很简单的办法就是建立一个大的对照表(比如用关联容器Map),比如<”曹”,”cao”>,<” 孟”,”meng”>,<” 德”,”de”>…但这样的做法,需要维护好一个比较大的对照表,同时一个汉字可能有多个发音,也就是说Map这样的容器时不行的,因为其<key,value>必须是一一对应的。在C++中可以用STL里面的multimap来解决这个问题,但Java中没有类似multimap这样的东西,除非自己实现一个。

Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大:

+ 支持同一汉字有多个发音

+ 还支持拼音的格式化输出,比如第几声之类的,

+ 同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。下面是其官方网址,其中提供了下载:

http://pinyin4j.sourceforge.net/

2. 基本用法:

通常情况下,只需要用到其中的PinyinHelper类中的静态方法toHanyuPinyinStringArray就可以了,比如:

String[] pinyinArray =PinyinHelper.toHanyuPinyinStringArray('单');

for(int i = 0; i < pinyinArray.length; ++i)

{

System.out.println(pinyinArray[i]);

}

就会输出:

dan1

chan2

shan4

这三种发音,后面的数字代表第几声。可以看到静态方法toHanyuPinyinStringArray返回的数据类型是一个String数组,它用来接收一个汉字的多个发音,如果toHanyuPinyinStringArray中的参数不是汉字,那么它会返回null。

3.格式支持

Pinyin4j支持拼音输出的格式化,比如,“黄”可以输出为“huang”、“huang2”、“huáng”等等,下面的代码就似是输出“huáng”的示例:

HanyuPinyinOutputFormat format= new HanyuPinyinOutputFormat();

format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);

format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

String[] pinyinArray = null;

try

{

pinyinArray = PinyinHelper.toHanyuPinyinStringArray('黄', format);

}

catch(BadHanyuPinyinOutputFormatCombination e)

{

e.printStackTrace();

}

for(int i = 0; i < pinyinArray.length; ++i)

{

System.out.println(pinyinArray[i]);

}

此外,还支持大小写转换、ü等等。详细情况,可以查看Pinyin4j自带的文档。

4.实际示例代码

如果我们要将一段文字中的汉字全部转换成不带音调的拼音输出,而这段文字中又可能包含阿拉伯数字、英文、标点符号等等。如果完全靠自己写代码进行转换,那是非常麻烦的,其中一个首先就要区别,这段文字中那些是汉字,那些是非汉字。有了Pinyin4j,这个问题就不再困难了,因为对于非汉字,Pinyin4j会自动输出null。参考下面的示例代码:

importnet.sourceforge.pinyin4j.*;

importnet.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;

importnet.sourceforge.pinyin4j.format.HanyuPinyinToneType;

importnet.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class Chinese2PY

{

public static void main(String[] args)

{

Hanyu hanyu = new Hanyu();

// 中英文混合的一段文字

String str = "荆溪白石出,Hello 天寒红叶稀。Android 山路元无雨,What's up? 空翠湿人衣。";

String strPinyin = hanyu.getStringPinYin(str);

System.out.println(strPinyin);

}

}

class Hanyu

{

private HanyuPinyinOutputFormat format = null;

private String[] pinyin;

public Hanyu()

{

format = new HanyuPinyinOutputFormat();

format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

pinyin = null;

}

//转换单个字符

public String getCharacterPinYin(char c)

{

try

{

pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);

}

catch(BadHanyuPinyinOutputFormatCombination e)

{

e.printStackTrace();

}

// 如果c不是汉字,toHanyuPinyinStringArray会返回null

if(pinyin == null) return null;

// 只取一个发音,如果是多音字,仅取第一个发音

return pinyin[0];

}

//转换一个字符串

public String getStringPinYin(String str)

{

StringBuilder sb = new StringBuilder();

String tempPinyin = null;

for(int i = 0; i < str.length(); ++i)

{

tempPinyin =getCharacterPinYin(str.charAt(i));

if(tempPinyin == null)

{

// 如果str.charAt(i)非汉字,则保持原样

sb.append(str.charAt(i));

}

else

{

sb.append(tempPinyin);

}

}

return sb.toString();

}

}

输出结果:

jingxibaishichu,Hellotianhanhongyexi。Android shanluyuanwuyu,What'sup? kongcuishirenyi。

Pinyin4j的基本用法相关推荐

  1. Pinyin4j的基本用法,以及给城市名称选择排序,侧边栏字母排序,内有Pinyin4j的下载链接,这是对我发表的上一篇文章进行修改以及更新bug,上一篇文章排序有点bug,现在将bug修改好了

    1.需要下载Pinyin4j的jar包.下载地址为https://sourceforge.net/projects/pinyin4j/files/ 下载后需要放到安卓项目目录下的libs文件夹.如下图 ...

  2. java pinyin4j_java实现中文汉字转拼音 Pinyin4j的基本用法

    一.前言 工作中有时候会遇到汉字拼音转换的需求,例如:用户首字母搜索某个内容的时候,wzry 可搜索 王者荣耀相关的. 这里推荐使用Pinyin4j,它是sourceforge.net上的一个开源项目 ...

  3. java实现中文汉字转拼音 Pinyin4j的基本用法

    一.前言 工作中有时候会遇到汉字拼音转换的需求,例如:用户首字母搜索某个内容的时候,wzry 可搜索 王者荣耀相关的. 这里推荐使用Pinyin4j,它是sourceforge.net上的一个开源项目 ...

  4. java取得汉字拼音(pinyin4j)

    jar包:pinyin4j.jar 基本用法: String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重'); 例如"重" ...

  5. zbb20180117 汉字转拼音 pinyin4

    包地址 https://pan.baidu.com/disk/home?#list/vmode=list&path=%2F%E5%AD%A6%E4%B9%A0 Pinyin4j的基本用法 1. ...

  6. Java中汉字转拼音pinyin4j的用法

    pinyin4j 是一个支持将简体和繁体中文转换到成拼音的Java开源类库: 依赖jar包导入 <!-- pinyin4j 汉语转拼音 --><dependency><g ...

  7. java pinyin4j_Java汉字转拼音pinyin4j用法详解

    一.工具介绍 pinyin4j 是一个支持将简体和繁体中文转换到成拼音的Java开源类库: 1. 功能 支持同一汉字有多个发音 还支持拼音的格式化输出,比如第几声之类的, 同时支持简体中文.繁体中文转 ...

  8. 探索PinYin4j.jar将汉字转换为拼音的基本用法

    将汉字转换为拼音在Android开发中是个很常见的问题.例如:在android手机应用开发中,要查询联系人的姓名,通常都是用拼音进行查询的. Pinyin4j是一个功能强悍的汉语拼音工具包,是sour ...

  9. java hanyupinyinoutputformat();_Java汉字转拼音pinyin4j用法

    Java汉字转拼音pinyin4j用法 在学习编程的过程中,我觉得不止要获得课本的知识, 更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请登陆疯狂java官网. ...

最新文章

  1. HDU3342拓扑排序
  2. ASML 1nm光刻机研究进展:摩尔定律尚未结束
  3. python开发pandas_二、Python开发---33、pandas(1)
  4. HTML JQuery 技巧总结
  5. 黄章谈魅族5G手机计划:明年推出 后年终端才算成熟
  6. springboot 设置默认访问index.html_【SpringBoot WEB系列】WebFlux静态资源配置与访问
  7. OpenCV学习笔记】二十七、轮廓特征属性及应用(四)——正外接矩形
  8. 定义一个扁平的按钮样式
  9. HTML教程(完整版).pdf,HTML教程详解(完整版).pdf
  10. 什么软件可以查手机卡的imsi_怎么查看手机的IMSI?
  11. 静态链接库和动态链接库
  12. 如何自动发送生日提醒和祝福
  13. 华为鸿蒙 OS 尝鲜,跑了个 “hello world”!跑通后,我特么开始怀疑人生...
  14. html body language,关于BODY LANGUAGE
  15. SE-第一章-整理-CCUT-ZY
  16. R语言多层桑基图_流量结构分布图——桑基图(Sankey)
  17. Imperva WAF 添加黑名单
  18. 模拟斗地主,按顺序初始化54张扑克牌,然后进行洗牌,随机抽取三张底牌,剩下的按照顺序进行发牌,打印出三个人的牌和底牌(ArrayList)
  19. 智汀双管齐下,玩转米家HomeKit智能家居
  20. 卡特兰数 Catalan number

热门文章

  1. webapi2学习笔记
  2. 客户打开率高达90%的开发信标题该怎么写?(附赠模板)
  3. FC接口测试工装研究
  4. JetBrains 又出了一款新神器,一套代码适应多端!
  5. 大学纠结选择计算机专业or软件专业,却不知道选择是否正确!怎么判断?
  6. 1135 mysql_Mysql实例mysql中一个普通ERROR 1135 (HY000)错误引发的血案
  7. Laravel 上传文件大小改为200M
  8. Python仅四步写出完整漂亮的五子棋
  9. 大数据对电子商务行业的影响,主要体现在哪几方面?
  10. 从包工头到程序猿(六)汶川地震