java实现汉字转拼音
2015-09-19 20:39
489 查看
转载请注明出处:/article/2606907.html
http://www.llwjy.com/blogdetail/e669927a50da5c3a8f2297718614109a.html
个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽~
-------------------------------------------------------------------------------------------------
一、问题描述
汉字转化为对应的拼音或者获取汉字拼音的首字母,这些都是在开发中经常遇到的问题,在获取汉字的拼音或者拼音的首字母之后,我们在推荐或者搜索部门可以很大程度提高用户的体验,比如用户输入“NH”,我们就可以联想出“你好”、“你会”、“年后”、“内涵”等词语。在Java中,pinyin4j.jar这个工具很好实现了将汉字转化为对应的拼音,下面我们就介绍下如何使用这个jar包。
二、资源下载
下载地址点击这里,下载之后解压,直接使用文件中的pinyin4j-2.5.0.jar即可。
三、提供方法
我们可以使用HanyuPinyinOutputFormat类来设置拼音的返回方式,比如设置拼音的大小写、音标方式以及拼音ü的显示形式,具体如下图:
![](http://img.blog.csdn.net/20150919203657835?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
直接使用PinyinHelper中的方法来对汉字做对应的转化,具体有如下三种,三种效果如何自己做下测试即可:
![](http://img.blog.csdn.net/20150919203708487?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、编写代码
针对我们平常可能用到的功能,我做了如下的封装,提供的功能还有具体的实现步骤参照代码中的注释:
五、输出结果
![](http://img.blog.csdn.net/20150919203837082?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
-------------------------------------------------------------------------------------------------
小福利
-------------------------------------------------------------------------------------------------
个人在极客学院上《Lucene案例开发》课程已经上线了(目前上线到第二课),欢迎大家吐槽~
第一课:Lucene概述
第二课:Lucene 常用功能介绍
第三课:网络爬虫
第四课:数据库连接池
第五课:小说网站的采集
http://www.llwjy.com/blogdetail/e669927a50da5c3a8f2297718614109a.html
个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽~
-------------------------------------------------------------------------------------------------
一、问题描述
汉字转化为对应的拼音或者获取汉字拼音的首字母,这些都是在开发中经常遇到的问题,在获取汉字的拼音或者拼音的首字母之后,我们在推荐或者搜索部门可以很大程度提高用户的体验,比如用户输入“NH”,我们就可以联想出“你好”、“你会”、“年后”、“内涵”等词语。在Java中,pinyin4j.jar这个工具很好实现了将汉字转化为对应的拼音,下面我们就介绍下如何使用这个jar包。
二、资源下载
下载地址点击这里,下载之后解压,直接使用文件中的pinyin4j-2.5.0.jar即可。
三、提供方法
我们可以使用HanyuPinyinOutputFormat类来设置拼音的返回方式,比如设置拼音的大小写、音标方式以及拼音ü的显示形式,具体如下图:
直接使用PinyinHelper中的方法来对汉字做对应的转化,具体有如下三种,三种效果如何自己做下测试即可:
四、编写代码
针对我们平常可能用到的功能,我做了如下的封装,提供的功能还有具体的实现步骤参照代码中的注释:
/** *@Description: 将汉语转化为拼音 */ package com.lulei.util; import java.util.ArrayList; import java.util.List; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; public class PinYinUtil { private static HanyuPinyinOutputFormat format = null; static { format = new HanyuPinyinOutputFormat(); //拼音小写 format.setCaseType(HanyuPinyinCaseType.LOWERCASE); //无音标方式;WITH_TONE_NUMBER:1-4数字表示英标;WITH_TONE_MARK:直接用音标符(必须WITH_U_UNICODE否则异常 format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); //用v表示ü format.setVCharType(HanyuPinyinVCharType.WITH_V); } /** * @param str * @return * @Author:lulei * @Description: 返回字符串的拼音 */ public static String[] getCharPinYinString(String str) { if (str == null || str.length() < 1) { return null; } List<String> result = new ArrayList<String>(); //对字符串中的记录逐个分析 for (int i = 0; i < str.length(); i++) { result = getCharPinYinString(str.charAt(i), result); } return result.toArray(new String[result.size()]); } /** * @param c * @param list * @return * @Author:lulei * @Description: 将字符c的拼音拼接到list中的记录中 */ private static List<String> getCharPinYinString(char c, List<String> list) { String[] strs = getCharPinYinString(c); List<String> result = new ArrayList<String>(); //如果解析出的拼音为空,判断字符C是否为英文字母,如果是英文字母则添加值拼音结果中 if (strs == null) { if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { c = c <= 91 ? (char)(c + 32) : c; if (list == null || list.size() == 0) { result.add(c + ""); } else { for (String s : list) { result.add(s + c); } } return result; } return list; } //将字符C的拼音首和已存在的拼音首组合成新的记录 for (String str : strs) { if (list == null || list.size() == 0) { result.add(str); } else { for (String s : list) { result.add(s + str); } } } return result; } /** * @param c * @return * @Author:lulei * @Description: 返回汉字的拼音 */ public static String[] getCharPinYinString(char c) { try { //返回字符C的拼音 return PinyinHelper.toHanyuPinyinStringArray(c, format); } catch (Exception e) { e.printStackTrace(); } return null; } /** * @param str * @return * @Author:lulei * @Description: 返回字符串的拼音的首字母 */ public static String[] getCharPinYinChar(String str) { if (str == null || str.length() < 1) { return null; } List<String> result = new ArrayList<String>(); //对字符串中的记录逐个分析 for (int i = 0; i < str.length(); i++) { result = getCharPinYinChar(str.charAt(i), result); } return result.toArray(new String[result.size()]); } /** * @param c * @param list * @return * @Author:lulei * @Description: 将字符c的拼音首字母拼接到list中的记录中 */ private static List<String> getCharPinYinChar(char c, List<String> list) { char[] chars = getCharPinYinChar(c); List<String> result = new ArrayList<String>(); //如果解析出的拼音为空,判断字符C是否为英文字母,如果是英文字母则添加值拼音结果中 if (chars == null) { if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { c = c < 91 ? (char)(c + 32) : c; if (list == null || list.size() == 0) { result.add(c + ""); } else { for (String s : list) { result.add(s + c); } } return result; } return list; } //将字符C的拼音首字母和已存在的拼音首字母组合成新的记录 for (char ch : chars) { if (list == null || list.size() == 0) { result.add(ch + ""); } else { for (String s : list) { result.add(s + ch); } } } return result; } /** * @param c * @return * @Author:lulei * @Description:返回汉字拼音首字母 */ public static char[] getCharPinYinChar(char c) { //字符C的拼音 String[] strs = getCharPinYinString(c); if (strs != null) { //截取拼音的首字母 char[] chars = new char[strs.length]; for(int i = 0; i <chars.length; i++) { chars[i] = strs[i].charAt(0); } return chars; } return null; } public static void main(String[] args) { // TODO Auto-generated method stub char c = "重庆".charAt(0); String[] str = PinYinUtil.getCharPinYinString(c); for(String s : str) { System.out.println(s); } char[] chars = PinYinUtil.getCharPinYinChar(c); for(char c1 : chars) { System.out.println(c1); } str = PinYinUtil.getCharPinYinString("重庆c"); for(String s : str) { System.out.println(s); } str = PinYinUtil.getCharPinYinChar("重庆a"); for(String s : str) { System.out.println(s); } } }
五、输出结果
-------------------------------------------------------------------------------------------------
小福利
-------------------------------------------------------------------------------------------------
个人在极客学院上《Lucene案例开发》课程已经上线了(目前上线到第二课),欢迎大家吐槽~
第一课:Lucene概述
第二课:Lucene 常用功能介绍
第三课:网络爬虫
第四课:数据库连接池
第五课:小说网站的采集
相关文章推荐
- test5.8
- java 类型与移位运算
- JAVA中变量和常量的理解
- javaweb转发和重定向的区别
- 使用NetBeans实现表格的增删改
- JAVA程序注解的理解
- 关于JDK的终极环境变量的配置
- Java对象表示方式1:序列化、反序列化和transient关键字的作用
- 关于创建子包(package)的问题
- 第一阶段快结束了。。。。
- Java面向对象的继承
- 徒手用Java来写个Web服务器和框架吧<第一章:NIO篇>
- eclipse转android studio须知以及一些注意事项(包括android studio安装以及配置)
- Java异步事件:轮询与中断
- java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapSDK_v3_2_0_15 from loader dalvik.system.PathCl
- java中基本数据类型和引用数据类型的区别?
- java.util.Stack类简介
- java web (登陆注册界面)
- 在MyEclipse中复制项目的时候要注意
- 使用JAVA将对象转换成JSON字符串