在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方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 block

e.printStackTrace();

}

//pinyin4j规则,当转换的符串不是汉字,就返回null

if(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

{

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 {

@Resource

private ChangeToPinYin changeToPinYin;

@Test

public void changePinYinTest(){

String str = "你在做什么?what are you nong sa lie?";

System.out.println(changeToPinYin.getStringPinYin(str));

}

@Ignore

public 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字符串转换为拼音_JAVA实现汉字转换为拼音 pinyin4j/JPinyin相关推荐

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

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

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

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

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

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

  4. java 实现汉字转换拼音_JAVA实现汉字转拼音功能代码实例

    JAVA中汉字转拼音的方法并不复杂,可以使用pinyin4j包来实现. 一.下载pinyin4j的架包,并导入项目中,如下: 如果是maven项目,maven依赖如下: com.belerweb pi ...

  5. java 拼音识别_JAVA实现汉字转拼音

    packageedu.ws;importcom.github.stuxuhai.jpinyin.ChineseHelper;importcom.github.stuxuhai.jpinyin.Piny ...

  6. mysql 汉字拼音_Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    一.创建拼音对照表 -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` varchar(255) CHARAC ...

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

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

  8. java获取汉字拼音_Java 根据汉字获取其拼音

    pom.xml导入pinyin4j的依赖 com.belerweb pinyin4j 2.5.1 汉字转拼音工具类package com.bizcloud.function; import net.s ...

  9. java汉字的拼音首字母_Java 获取汉字的拼音首字母

    Java 获取汉字的拼音首字母: pom.xml 引用 pinyin4j 包: com.belerweb pinyin4j 2.5.0 PinyinUtil 类: package com.xxx.co ...

最新文章

  1. 小程序获取图片的宽高
  2. 一个学术 导航网站----科塔学术
  3. 在winform程序中启动wpf窗体
  4. Spring JDBC-事务方法嵌套调用解读
  5. 3.1.2 操作系统内存管理管些什么?
  6. java thrift client_使用thrift的java client调用python server
  7. JAVA的彻底删除重下
  8. bat-bat-bat (重要的事情说三遍)
  9. java移动文件导致tomcat死掉_原 netty导致tomcat假死
  10. 15.2. 网络监控
  11. 2022年寒假ACM练习2(待补题)
  12. 【2017西安邀请赛:A】XOR(区间异或最大值多次查询---线段树+线性基合并)
  13. c语言课程设计题目 吃豆子,C语言吃豆子游戏
  14. 【2021自我知识蒸馏】Extracting knowledge from features with multilevel abstraction
  15. 用支付宝和微信可以直接跳转拉起支付,API搭建比较方便第三方支付接口首选杉德比较靠谱,
  16. Nginx 负载均衡动静分离配置
  17. Android.mk 包含问题带来的so.toc needed by 错误
  18. P5550 Chino的数列
  19. python如何期货交易_能用python的期货交易软件
  20. 同花顺_代码解析_交易系统_J01_08

热门文章

  1. 【Unity3D日常开发】获取天气信息以及地方位置
  2. Java 假设一张足够大的纸,纸张的厚度为0.5 毫米。请问对折多少次以后,可以达到珠穆朗玛峰的高度(最新数据:8844.43 米)。请编写程序输出对折次数
  3. 默克尔树 Merkle树之Go语言实现
  4. C++入门总结(一)
  5. php mysql utf 8_PHP+MySQL中对UTF-8,UTF8(utf8),set names gbk 的理解
  6. 2021Java进阶学习资料!java自学宝典pdf下载
  7. Navicat Premium 15 完全卸载
  8. slack 使用说明_我如何使用Slack作为自己的个人助理
  9. DBeaver显示系统数据库不全
  10. gulp自动化环境搭建,自动化解决方案