Java汉字转拼音pinyin4j用法
2016-06-16 10:46
429 查看
汉字转换拼音在日常开发中是个很常见的问题。例如我们伟大的12306,在地名中输入“WH”,就会出现“武汉”“芜湖”“威海”等地名,输入“WUHU”就会出现“芜湖”。
Java获取汉字的拼音,pinyin4j这个库可以很好的解决这个问题。
下载地址:http://sourceforge.net/projects/pinyin4j/
下载解压,里面有个pinyin4j-2.5.0.jar,使用这个库即可。
汉字转拼音:
String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重');
上面这行代码就是单个汉字转拼音了,例如“重”字,该方法返回一个String类型的数组:
"zhong4"
"chong2"
“重”是一个多音字,该方法的返回数组包含这个字的所有读音的拼音。每个读音最后有个数字就是音调(第一声 第二声 第三声 第四声,这个不用解释了)。
上面是最简单的一种获取单个汉字的方式,还可以使用HanyuPinyinOutputFormat来格式化返回拼音的格式。
[java] view
plain copy
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);
toHanyuPinyinStringArray如果传入的字符不是汉字不能转换成拼音,那么会直接返回null。
虽然pinyin4j很好用,但是还是有局限的。以上代码只能获取单个汉字的拼音,但是不能获取一个包含多音字的词的拼音。例如“重庆”,无法判断到底是“chongqing”还是“zhongqing”,pinyin4j不能通过上下文来判断多音字的读音。
所以,在获取一个包含多音字的词语的读音,可以返回一个列表,正确的读音只能是人工判断选择。
作者:叉叉哥 转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/8558620
=========================================================================
1、至少匹配一个汉字的写法。
2、这两个unicode值正好是Unicode表中的汉字的头和尾。
3、"[]"代表里边的值出现一个就可以,后边的“+”代表至少出现1次,合起来即至少匹配一个汉字。
Java获取汉字的拼音,pinyin4j这个库可以很好的解决这个问题。
下载地址:http://sourceforge.net/projects/pinyin4j/
下载解压,里面有个pinyin4j-2.5.0.jar,使用这个库即可。
汉字转拼音:
String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('重');
上面这行代码就是单个汉字转拼音了,例如“重”字,该方法返回一个String类型的数组:
"zhong4"
"chong2"
“重”是一个多音字,该方法的返回数组包含这个字的所有读音的拼音。每个读音最后有个数字就是音调(第一声 第二声 第三声 第四声,这个不用解释了)。
上面是最简单的一种获取单个汉字的方式,还可以使用HanyuPinyinOutputFormat来格式化返回拼音的格式。
[java] view
plain copy
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);
toHanyuPinyinStringArray如果传入的字符不是汉字不能转换成拼音,那么会直接返回null。
虽然pinyin4j很好用,但是还是有局限的。以上代码只能获取单个汉字的拼音,但是不能获取一个包含多音字的词的拼音。例如“重庆”,无法判断到底是“chongqing”还是“zhongqing”,pinyin4j不能通过上下文来判断多音字的读音。
所以,在获取一个包含多音字的词语的读音,可以返回一个列表,正确的读音只能是人工判断选择。
作者:叉叉哥 转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/8558620
=========================================================================
问:java正则中REGEX = "[\u4e00-\u9fa5]+"是什么意思?
1、至少匹配一个汉字的写法。2、这两个unicode值正好是Unicode表中的汉字的头和尾。
3、"[]"代表里边的值出现一个就可以,后边的“+”代表至少出现1次,合起来即至少匹配一个汉字。
相关文章推荐
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- Java源代码分析之Stack栈
- java 处理时间的各种方式——获取时间——时间格式化
- 使用idea Live Template实现eclipse syso自动提示代码功能
- java 多种判断key是否在map中存在的方法
- 错误中学习--spring框架 org.springframework.beans.factory.NoSuchBeanDefinitionException
- java运行时类型鉴定和反射
- Java 标准I/O重定向
- 在Java中使用EclEmma插件进行代码覆盖率检测
- JAVA学习笔记(三)-并发编程 Callable Future CompleableFuture
- Java工程师成神之路~
- Java ConcurrentModificationException异常原因和解决方法
- java 之 super this 的区别,继承与实现的差异
- FindBugs入门简介(eclipse安装使用实例)
- 我们使用eclipse编辑spring配置文件时,经常没有提示,而无从下手时。 现在我们就来解决没有提示的问题。
- Struts2更改配置文件默认路径
- 解决错误java compiler level does not match the version of the installed java project facet
- struts中的invocation
- Java中的IO操作总结(二)
- spring mvc 的文件的上传 -- 后续跟进