java 中文转拼音之pinyin4j
一、简介
有时候,须要将汉字编程相应的拼音。以方便数据的处理。比方在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的更多相关文章
- Java 中文转换拼音工具
Java 中文转换拼音工具 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p&g ...
- 中文转拼音,pinyin4j实用示例
Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换.拼音输出格式可以定制. Support Chinese character (both Simplified and Trandi ...
- java取得汉字拼音(pinyin4j)
jar包:pinyin4j.jar 基本用法: String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重'); 例如“重”字,该方法返回一个 ...
- java 汉语转拼音(全拼,首字母)
import java.util.*; import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.for ...
- Python中文转拼音代码(支持全拼和首字母缩写)
本文的代码,从https://github.com/cleverdeng/pinyin.py升级得来,针对原文的代码,做了以下升级: 1 2 3 4 1.可以传入参数firstcode:如果为 ...
- java中文乱码解决之道(一)-----认识字符集
沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...
- java中文乱码解决之道(九)-----总结
乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...
- Java 中文乱码问题总结
开发java应用出现乱码是很常见的,毕竟现在unicode的使用还不是很广泛,在使用gb2312(包含了gbk简体,big5繁体)的系统中要正确 实现中文的display和数据库的存储是最基本的要求. ...
- Mono 3.2 测试NPinyin 中文转换拼音代码
C#中文转换为拼音NPinyin代码 在Mono 3.2下运行正常,Spacebuilder 有使用到NPinyin组件,代码兼容性没有问题. using System; using System. ...
随机推荐
- [Asp.net MVC]Html.AntiForgeryToken()
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站 ...
- hibernate一级缓存,二级缓存和查询缓存
一级缓存 (必然存在) session里共享缓存,伴随session的生命周期存在和消亡: 1. load查询实体支持一级缓存 2. get查询实体对象也支持 3. save保存的实体对象会缓存 ...
- linu下修改mysql数据库面
修改密码:1.例如你的 root用户现在没有密码,你希望的密码修改为123456,那么命令是:mysqladmin -u root password 1234562.如果你的root现在有密码了(12 ...
- C#编程(十一)----------C#编程规范
C#编程规范 1.要使一个代码块内的代码都同意缩进一个tab键长度 2.有下列情况下建议有换行 方法之间: 局部变量和它后边的语句之间: 方法内的功能逻辑部分之间: 3.{和}要单起一行 4.每行建议 ...
- C语言函数库
C语言函数库 分类函数目录函数进程函数诊断函数接口子程序输入输出 str字符串操作函数mem操作存贮数组 数学函数 时间日期函数 转换函数 分类函数,所在函数库为ctype.h[top] int is ...
- mac OS X下配置jdk环境变量
进入命令行,开始如下操作: cd ~touch.bash_profile vi .bash_profile 输入内容jdk变量配置内容: export JAVA_HOME=/Library/Jav ...
- java、js中实现无限层级的树形结构(类似递归)
js中: var zNodes=[ {id:0,pId:-1,name:"Aaaa"}, {id:1,pId:0,name:"A"}, {id:11,pId:1 ...
- jquery选择器用法笔记(第二部分)
今天继续讲讲jquery选择器的更多用法,希望能给大家带来帮助. 9.$("ul li:eq(3)") -- 列表中的第四个元素(index 从 0 开始) :eq() 选择器 ...
- 关于css优先级
css的优先级从低到高依次是:内部样式表的优先级为(1,0,0,0),id选择器优先级为(0,1,0,0),class选择器为(0.0,1,0),tag标签为(0.0,0,1).除此之外,!impor ...
- Access2013 Mssql2012 数据库连接字符串
直接在调用的地方设置 // access 2003 DBConStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Ap ...