转载自  JAVA实现汉字转换为拼音 pinyin4j/JPinyin

在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方jar支持转换,结合网上很多前辈的代码,copy了两个简单的工具方法,供参考

第一个是使用pinyin4j的jar,此jar对多音字语句的处理不太理想

package com.lovo.utils;import org.springframework.stereotype.Component;import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;/*** pinyin4j汉字转拼音工具类* @author zhiheng**/
@Component
public class ChangeToPinYin {//pinyin4j格式类private HanyuPinyinOutputFormat format = null;//拼音字符串数组private String[]pinyin;//通过构造方法进行初始化public ChangeToPinYin(){format = new HanyuPinyinOutputFormat();/** 设置需要转换的拼音格式* 以天为例* HanyuPinyinToneType.WITHOUT_TONE 转换为tian* HanyuPinyinToneType.WITH_TONE_MARK 转换为tian1* HanyuPinyinVCharType.WITH_U_UNICODE 转换为tiān* */format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);pinyin = null;}/*** 对单个字进行转换* @param pinYinStr 需转换的汉字字符串* @return 拼音字符串数组*/public String getCharPinYin(char pinYinStr){try {//执行转换pinyin = PinyinHelper.toHanyuPinyinStringArray(pinYinStr, format);} catch (BadHanyuPinyinOutputFormatCombination e){// TODO Auto-generated catch blocke.printStackTrace();}//pinyin4j规则,当转换的符串不是汉字,就返回nullif(pinyin == null){return null;}//多音字会返回一个多音字拼音的数组,pinyiin4j并不能有效判断该字的读音return pinyin[0];}/*** 对单个字进行转换* @param pinYinStr* @return*/public String getStringPinYin(String pinYinStr){StringBuffer sb = new StringBuffer();String tempStr = null;//循环字符串for(int i = 0; i<pinYinStr.length(); i++){tempStr = this.getCharPinYin(pinYinStr.charAt(i));if(tempStr == null){//非汉字直接拼接sb.append(pinYinStr.charAt(i));}else{sb.append(tempStr);}}return sb.toString();}
}

测试

import javax.annotation.Resource;import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.lovo.utils.ChangeToPinYin;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class ToPinYinTest {@Resourceprivate ChangeToPinYin changeToPinYin;@Testpublic void changePinYinTest(){String str = "你在做什么?what are you nong sa lie?";System.out.println(changeToPinYin.getStringPinYin(str));}@Ignorepublic void changechar(){char c = '你';System.out.println(changeToPinYin.getCharPinYin(c));}}

测试结果

第二个方法使用JPinyin,说是在pinyin4j的jar上进行了优化,可以实现汉字转换为拼音,并自动识别常用多音字,还支持简体转换为繁体,检查是否为简体,是否为繁体,是否为中文字符等功能,下面一段代码简单列举了下汉字转换拼音及简体转换繁体

package com.lovo.utils;import opensource.jpinyin.ChineseHelper;
import opensource.jpinyin.PinyinFormat;
import opensource.jpinyin.PinyinHelper;import org.springframework.stereotype.Component;@Component
public class ChangeToPinYinJP {/*** 转换为有声调的拼音字符串* @param pinYinStr 汉字* @return 有声调的拼音字符串*/public String changeToMarkPinYin(String pinYinStr){String tempStr = null;try {tempStr =  PinyinHelper.convertToPinyinString(pinYinStr,  " ", PinyinFormat.WITH_TONE_MARK);} catch (Exception e){e.printStackTrace();}return tempStr;}/*** 转换为数字声调字符串* @param pinYinStr 需转换的汉字* @return 转换完成的拼音字符串*/public String changeToNumberPinYin(String pinYinStr){String tempStr = null;try {tempStr = PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_NUMBER);} catch (Exception e) {e.printStackTrace();}return tempStr;}/*** 转换为不带音调的拼音字符串* @param pinYinStr 需转换的汉字* @return 拼音字符串*/public String changeToTonePinYin(String pinYinStr){String tempStr = null;try {tempStr =  PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITHOUT_TONE);} catch (Exception e){e.printStackTrace();}return tempStr;}/*** 转换为每个汉字对应拼音首字母字符串* @param pinYinStr 需转换的汉字* @return 拼音字符串*/public String changeToGetShortPinYin(String pinYinStr){String tempStr = null;try {tempStr = PinyinHelper.getShortPinyin(pinYinStr);} catch (Exception e) {e.printStackTrace();}return tempStr;}/*** 检查汉字是否为多音字* @param pinYinStr 需检查的汉字* @return true 多音字,false 不是多音字*/public boolean checkPinYin(char pinYinStr){boolean check  = false;try{check = PinyinHelper.hasMultiPinyin(pinYinStr);} catch (Exception e) {e.printStackTrace();}return check;}/*** 简体转换为繁体* @param pinYinStr* @return*/public String changeToTraditional(String pinYinStr){String tempStr = null;try {tempStr = ChineseHelper.convertToTraditionalChinese(pinYinStr);} catch (Exception e) {e.printStackTrace();}return tempStr;}/*** 繁体转换为简体* @param pinYinSt* @return*/public String changeToSimplified(String pinYinSt){String tempStr = null;try {tempStr = ChineseHelper.convertToSimplifiedChinese(pinYinSt);} catch (Exception e) {e.printStackTrace();}return tempStr;}//  public static void main(String[] args) {
//      String str = "重慶 most input";
//      ChangeToPinYinJP jp = new ChangeToPinYinJP();
//      System.out.println(jp.changeToSimplified(str));
//      System.out.println(jp.checkPinYin('重'));
//  }
}

拼音转换jar还有很多其他的功能,对项目实际是很有帮助的,这里只是简单的介绍了下最基本的功能,有兴趣的可以自行去了解。

JAVA实现汉字转换为拼音 pinyin4j/JPinyin相关推荐

  1. java字符串转换为拼音_JAVA实现汉字转换为拼音 pinyin4j/JPinyin

    在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方jar支持转换,结合网上很多前辈的代 ...

  2. Java中汉字转拼音pinyin4j的用法

    pinyin4j 是一个支持将简体和繁体中文转换到成拼音的Java开源类库: 依赖jar包导入 <!-- pinyin4j 汉语转拼音 --><dependency><g ...

  3. java pinyin4j_Java汉字转拼音pinyin4j用法详解

    一.工具介绍 pinyin4j 是一个支持将简体和繁体中文转换到成拼音的Java开源类库: 1. 功能 支持同一汉字有多个发音 还支持拼音的格式化输出,比如第几声之类的, 同时支持简体中文.繁体中文转 ...

  4. Java中将汉字转换为拼音

         近来有个需求是从前台输入的文本框的汉字串,到后台要将其处理成首字母的串,存放到数据库中.网上查找了方法,这里记录下来,方便查看.Java中有汉字转换为全拼的包,这里引用的是 net.sour ...

  5. java 判断汉字音调_JAVA实现汉字转换为拼音 自动识别常用多音字 JPinyin

    JAVA实现汉字转换为拼音 自动识别常用多音字 JPinyin 使用JPinyin,可以实现汉字转换为拼音,并自动识别常用多音字,还支持简体转换为繁体,检查是否为简体,是否为繁体,是否为中文字符等功能 ...

  6. java 中文转成_Java实现汉字转换为拼音 [转]

    代码说明: Java实现汉字转换为拼音的GUI版本. GUI代码部分: /** * @(#)CnToSpellGUI.java * kindani * 2004-10-25?? * */ import ...

  7. java把汉字转换成拼音_Java实现汉字转换为拼音

    本文的核心代码取自easydozer的blog:http://blog.csdn.net/easydozer/ 代码说明: Java实现汉字转换为拼音的GUI版本. GUI代码部分: /** * @( ...

  8. java jisuan da xie zi mu ge shu_Java 实现汉字转换为拼音的实例

    Java 实现汉字转换为拼音 转换类 public class PINYINChinese { private static int[] pyvalue = new int[] { -20319, - ...

  9. java 实现汉字转换拼音_Java实现汉字转换为拼音

    # re: Java实现汉字转换为拼音 2006-11-24 15:06 芦苇 JAVA将汉字转化成拼音的方法 /** *//** ################################## ...

最新文章

  1. AI“生死”落地:谁有资格入选AI Top 30+案例?
  2. swift_042(Swift的typealias(别名)的用法)
  3. can协议解析字符串的原理
  4. js动态渲染html页面,利用Scrapy-Splash抓取JS动态渲染的网页数据
  5. pythonlist循环添加元素_python中 for循环之后 添加元素到列表失败?
  6. 基于改进SSD算法的小目标检测与应用
  7. 论文笔记:STD2P: RGBD Semantic Segmentation Using Spatio-Temporal Data-Driven Pooling
  8. 递推+高精度——蜜蜂路线(洛谷 P2437)
  9. Chapter 5. MPEG-4 Visual
  10. 软件工程导论知识点总结
  11. 如何给网页设置自己的字体
  12. 单片机学习——存储器详解(程序存储器、片内RAM、拓展RAM、EEPROM)
  13. 单细胞测序数据下载和预处理
  14. c语言strcpy、strcmp、strcat等常见字符操作函数的介绍
  15. steam无法连接至计算机,win10系统打开steam提示无法连接至steam网络的图文方法
  16. Base64与Gzip编解码插件
  17. 8.论文学习Liver Tumor Segmentation and Classification: A Systematic Review
  18. android 短信发件箱,android将发送短信写入发件箱
  19. 希沃白板如何解决手机端播放课件内视频出现黑屏闪退
  20. 记录chrome 浏览器 本地ip 地址报 CORS 错误

热门文章

  1. C++实现AOE网中的关键路径算法(邻接表存储)
  2. [蓝桥杯]最大连续子序列和
  3. 蓝桥杯2015初赛-加法变乘法-枚举
  4. vue动态跟新layui的select_vue+layui实现select动态加载后台数据的例子
  5. 数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树
  6. exceptionhandler注解_SpringMVC 中 @ControllerAdvice 注解的三种使用场景!
  7. word List 14
  8. fit、transform与fit_transform
  9. 记一次应用配置的数据库连接被打满问题
  10. 深入理解 JVM Class文件格式(二)