一、简介

有时候,须要将汉字编程相应的拼音。以方便数据的处理。比方在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. .NET泛型02,泛型的使用

    在" .NET泛型01,为什么需要泛型,泛型基本语法"中,了解了泛型的基本概念,本篇偏重于泛型的使用.主要包括: ■ 泛型方法重载需要注意的问题■ 泛型的类型推断■ 泛型方法也可以 ...

  2. 转 Objective-C中不同方式实现锁(二)

    在上一文中,我们已经讨论过用Objective-C锁几种实现(跳转地址),也用代码实际的演示了如何通过构建一个互斥锁来实现多线程的资源共享及线程安全,今天我们继续讨论锁的一些高级用法. .NSRecu ...

  3. 35个Jquery应用实例

    Jquery库及相应插件如今红遍网络,收集了网络上有关JQuery的35个精彩使用例子,在此统一展示供JQuery使用时的查询.  1. 选择网页元素jQuery的基本设计和主要用法,就是" ...

  4. iOS:UIView视图与组件控件

    一.UIView常见属性  (1)@property(nonatomic,readonly)UIView *superview; //获取自己的父控件对象  (2)@property(nonatomi ...

  5. Objective-C:除数为0的情况下异常的处理(检测、抛出、捕捉、处理)

    // DivTest.h // 异常的处理 // // Created by ma c on 15/8/11. // Copyright (c) 2015年. All rights reserved. ...

  6. mahout源码分析之DistributedLanczosSolver(六)完结篇

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 接上篇,分析完3个Job后得到继续往下:其实就剩下两个函数了: List<Map.Entry< ...

  7. 微信小程序Nginx环境配置

    环境配置概述 主要内容: SSL免费证书申请步骤 Nginx HTTPS 配置 TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申 ...

  8. 跨平台app开发(引擎)工具的选择【转】

    跨平台app开发(引擎)工具的选择 1.html5执行速度慢,用户体验不好 2.原生应用开发,即ios和安卓分别开发,需要两种技术人员,后期代码维护困难,很难达到统一. 3.xamarin是一款c#的 ...

  9. JavaScript事件代理和事件委托

    一.概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的 ...

  10. Android实现圆形的图片边角

    ImageView没有边角圆化的设置,但是可以通过代码设置实现.一个国外的码农写的方法. 效果: 地址:http://www.curious-creature.org/2012 代码: package ...