一、简介

有时候,须要将汉字编程相应的拼音。以方便数据的处理。比方在Android手机应用的开发上。要查询联系人的姓名。通常都是用拼音进行查询的。

比方要查询“曹孟德”,就能够输入“cmd”,即“曹孟德”三个汉字的拼音“caomengde”各字的首字母。可是如何才干将“曹孟德”翻译成“caomengde”呢?

非常easy的办法就是建立一个大的对比表(比方用关联容器Map),比方<”曹”,”cao”>。<” 孟”。”meng”>。<” 德”,”de”>…但这种做法。

须要维护好一个比較大的对比表,同一时候一个汉字可能有多个发音。也就是说Map这种容器时不行的。由于其<key,value>必须是一一相应的。

在C++中能够用STL里面的multimap来解决问题,但Java中没有类似multimap这种东西。除非自己实现一个。





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

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

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

+ 同一时候支持中文简体、繁体中文转换为拼音…使用起来也很easy。





pinyin4j的官方下载地址http://sourceforge.net/projects/pinyin4j/files/。眼下最新的版本号是2.5.0

下载解压后的文件夹结构及说明例如以下

(1)     doc : pinyin4j的api文档

(2)     lib : pinyin4j的jar包

(3)     src : pinyin4j的源码

(4)     CHANGELOG.txt : pinyin4j的版本号更新日志

(5)     COPYING.txt : LICENSE说明

(6)     README.txt : pinyin4j的概要介绍





二、局限性:

尽管pinyin4j非常好用,可是还是有局限的。下面代码仅仅能获取单个汉字的拼音,可是不能获取一个包括多音字的词的拼音。

比如“重庆”,无法推断究竟是“chongqing”还是“zhongqing”,pinyin4j不能通过上下文来推断多音字的读音。

所以,在获取一个包括多音字的词语的读音,能够返回一个列表,正确的读音仅仅能是人工推断选择。





三、格式控制:

HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();   

  

// UPPERCASE:大写  (ZHONG)  

// LOWERCASE:小写  (zhong)  

format.setCaseType(HanyuPinyinCaseType.LOWERCASE);  

  

// WITHOUT_TONE:无音标  (zhong)  

// WITH_TONE_NUMBER:1-4数字表示英标  (zhong4)  

// WITH_TONE_MARK:直接用音标符(必须WITH_U_UNICODE否则异常)  (zhòng)  

format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);  

  

// WITH_V:用v表示ü  (nv)  

// WITH_U_AND_COLON:用"u:"表示ü  (nu:)  

// WITH_U_UNICODE:直接用ü (nü)  

format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);  

          

String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重', format); 





四、代码





public class PinYin4JTest {



 public static String getPinYin(String inputString) {  

          

       HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();  

       format.setCaseType(HanyuPinyinCaseType.LOWERCASE);  

       format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);  

       format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);  

 

       char[] input = inputString.trim().toCharArray();  

       StringBuffer output = new StringBuffer("");  

 

       try {  

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

               if (Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {  

                   String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);  

                   output.append(temp[0]);  

                   output.append(" ");  

               } else  

                   output.append(Character.toString(input[i]));  

           }  

       } catch (BadHanyuPinyinOutputFormatCombination e) {  

           e.printStackTrace();  

       }  

       return output.toString();  

   } 





/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(getPinYin("中华人民共和国"));

}





}





注:pinyin4j支持多种拼音方式

Hanyu Pinyin 汉语拼音

Tongyong Pinyin 通用拼音

Wade-Giles 威妥玛拼音

MPS2 (Mandarin Phonetic Symbols II) 国语注音符号第二式

Yale Romanization 耶鲁罗马化拼音

Gwoyeu Romatzyh国语国语罗马化拼音

    各种拼音说明

        Yale Pinyin是在第二次世界大战期间由美国军方发明的编码系统,主要为了让在中国地区作战的美军士兵可以高速地熟悉汉语发音。

能够向当地人请求帮助。能够说这是一个速成教材,它的目的甚至不是用来互相交流而是使士兵在发音时不会被中国人听错就能够了。

        Gwoyeu Romatzyh:即国语罗马字,它是由林语堂提议建立的。在1928年由国民政府大学堂颁布推行。在中国的台湾省这一编码体系得到了保留,

可是它就像 Yale一样如今差点儿非常少有人使用,在1986年。国语罗马字被国语注音符号第二式(MPSII)所代替,

在2002年。又被通用拼音(Tongyong Pinyin)代替,成为台湾今天正式的官方汉语音译编码体系。

威妥玛拼音,习惯称作威妥玛拼法或威玛式拼音、韦氏拼音、威翟式拼音,是一套用于拼写中文普通话的罗马拼音系统。

19世纪中叶由英国人威妥玛(Thomas Francis Wade)发明,后由翟理斯(Herbert Allen Giles)完毕修订,并编入其所撰写的汉英字典。

java 中文转拼音之pinyin4j的更多相关文章

  1. Java 中文转换拼音工具

    Java 中文转换拼音工具 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p&g ...

  2. 中文转拼音,pinyin4j实用示例

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换.拼音输出格式可以定制. Support Chinese character (both Simplified and Trandi ...

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

    jar包:pinyin4j.jar 基本用法: String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重'); 例如“重”字,该方法返回一个 ...

  4. java 汉语转拼音(全拼,首字母)

    import java.util.*; import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.for ...

  5. Python中文转拼音代码(支持全拼和首字母缩写)

    本文的代码,从https://github.com/cleverdeng/pinyin.py升级得来,针对原文的代码,做了以下升级:     1 2 3 4 1.可以传入参数firstcode:如果为 ...

  6. java中文乱码解决之道(一)-----认识字符集

    沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...

  7. java中文乱码解决之道(九)-----总结

    乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...

  8. Java 中文乱码问题总结

    开发java应用出现乱码是很常见的,毕竟现在unicode的使用还不是很广泛,在使用gb2312(包含了gbk简体,big5繁体)的系统中要正确 实现中文的display和数据库的存储是最基本的要求. ...

  9. Mono 3.2 测试NPinyin 中文转换拼音代码

    C#中文转换为拼音NPinyin代码  在Mono 3.2下运行正常,Spacebuilder 有使用到NPinyin组件,代码兼容性没有问题. using System; using System. ...

随机推荐

  1. How to check Ubuntu version

    Below you can find some tips on how to check Ubuntu version you are currently running. The first pla ...

  2. C#(静态String类)

    [转]http://blog.csdn.net/angelazy/article/details/8501776 C#中提供了比较全面的字符串处理方法,很多函数都进行了封装为我们的编程工作提供了很大的 ...

  3. Spring Boot中使用redis的发布/订阅模式

    原文:https://www.cnblogs.com/meetzy/p/7986956.html redis不仅是一个非常强大的非关系型数据库,它同时还拥有消息中间件的pub/sub功能,在sprin ...

  4. Java heap space 解决方法(转)

      因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 java.lang.OutOfMemoryError: Java heap space 这样的错误. 在网上一查可能是JAVA的堆栈 ...

  5. [Android Pro] Android源码编译之Nexus5真机编译

    reference to : http://blog.csdn.net/liu1075538266/article/details/51272398 1.   前言 在Android安全的研究工作中, ...

  6. Python已成为网络攻击的首选编程语言

    Python已成为网络攻击的首选编程语言 最新的调查数据表明,Python已经变成了世界上最热门的编程语言了,而Python的热门风也刮到了信息安全领域中.Python,摇身一变,也变成了黑客开发网络 ...

  7. TRIZ理论的进化法则分析(TRIZ学习笔记)

    人们在创新和完好系统的过程能够遵循一定的规律(或者叫法则).从而降低创新和完好系统过程中的试错成本,以下就TRIZ的八大进化原则来进行说明(这个八大法则是前人们的总结,我这里当然会增加我的理解). 我 ...

  8. DDR SDRAM芯片DQS的作用以及读写DQS/DQ对齐方式不同的原因

    节选内容转载自https://www.design-reuse.com/articles/13805/the-love-hate-relationship-with-ddr-sdram-control ...

  9. iOS开发-UI基础Demo

    现在更多的学习资料都是xCode4.X的,发现xCode6.1还是很多东西,如果有正在学习iOS开发的可以通过Demo简单了解下iOS的UI开发~ 1.新建单视图文件: 2.新建项目名称,语言选择OC ...

  10. 可进可退,jQuery图片、视频、flash播放插件prettyPhoto使用记录

    一.prettyPhoto简介 prettyPhoto是一款基于jquery的轻量级的lightbox图片播放浏览插件,它不仅支持图片,还同时支持视频.flash.YouTube.iframe和aja ...