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

  1. java实现汉字转为拼音

    java实现汉字转为拼音: 1.需要导入pinyin4j.jar package com.loo.pinyin; import net.sourceforge.pinyin4j.PinyinHelpe ...

  2. JAVA实现汉字转拼音

    两个工具包都可以实现:pinyin4j/JPinyin pinyin4j 第一个是使用pinyin4j的jar,此jar对多音字语句的处理不太理想 package edu.ws; import net ...

  3. iOS将汉字转换为拼音

    将汉字转换为拼音 - (NSString *)chineseToPinyin:(NSString *)chinese withSpace:(BOOL)withSpace { CFStringRef h ...

  4. 使用PinYin4j.jar将汉字转换为拼音

    package com.Test.util; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j ...

  5. JAVA将汉字转换为全拼以及返回中文的首字母,将字符串转移为ASCII码

    import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseT ...

  6. 使用CFStringTransform将汉字转换为拼音

    之前做通讯录相关的一些App时,有一个比较常用的算法是将汉字转换成拼音.当时采用的做法是:将各个拼音段的首个汉字(按Unicode排序)做成两个数组,一个数组存拼音,另一个数组存拼音对应首个汉字的Un ...

  7. sql函数:汉字转换为拼音

    sql数据库自定义一个函数把下面代码写进去 功能是得到汉字拼音首字母create function fun_getPY(@str nvarchar(4000)) returns nvarchar(40 ...

  8. 汉字转换为拼音的JavaScript库

    将JSPinyin剥离mootools这个JavaScript库,可以独立使用. 1)一个是将汉字翻译为拼音,其中每一个字的首字母大写: pinyin.getFullChars(this.value) ...

  9. js汉字转换为拼音

    片段 1 片段 2 gistfile1.txt /* --- description: Pinyin, to get chinese pinyin from chinese. license: MIT ...

随机推荐

  1. 优化器Optimizer

    目前最流行的5种优化器:Momentum(动量优化).NAG(Nesterov梯度加速).AdaGrad.RMSProp.Adam,所有的优化算法都是在原始梯度下降算法的基础上增加惯性和环境感知因素进 ...

  2. Codeforces 808G Anthem of Berland【KMP】【DP】

    LINK 简要题意 给你一个串s,上面有字母和一些通配符,问你将通配符换成字母之后最多可以出现多少次串t 首先有一个很傻子的做法就是\(dp_{i,j}\)表示s到第i个位置匹配t串前j个字符的完整t ...

  3. Linux系统下位(Ubuntu 11.04) 下安装配置 JDK 7安装步骤指导

    第一步:下载jdk下载内容为:jdk分为:jdk-7-linux-i586.tar.gzjdk-7u51-linux-x64.tar.gz(适合64位Linux操作系统) hadoop版本为:hado ...

  4. 常用的SQL语句大全

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  5. fpga pll重配置实验总结

    今天做了pll重配置的实验,输入时钟50m初始配置输出75m经重配置后输出100m,带宽为low,使用的ip:rom,altpll_reconfig ,altpll,将altpll配置为可重配置模式, ...

  6. netstat 命令 与 ss 命令

    http://www.cnblogs.com/peida/archive/2013/03/11/2953420.html http://www.ttlsa.com/linux-command/ss-r ...

  7. 在vue中无论使用router-link 还是 @click事件,发现都没法从列表页点击跳转到内容页去

    在vue中如论使用router-link 还是 @click事件,发现都没法从列表页点击跳转到内容页去,以前都是可以的,想着唯一不同的场景就是因为运用了scroll组件(https://ustbhua ...

  8. JAVA-Unit03: SQL(基础查询) 、 SQL(关联查询)

    Unit03: SQL(基础查询) . SQL(关联查询) 列别名 当SELECT子句中查询的列是一个函数 或者表达式时,那么查询出来的结果集 中对应的该字段的名字就是这个函数或者 表达式的名字.为此 ...

  9. 微信web端生成支付二维码

    授权获取二维码类: <?php /** * Trade类 * @author xyyphp * @date 2016/10/10 */ abstract class TradeControlle ...

  10. STM32的启动过程分析

    对于stm32的启动过程一直心存疑惑.今天找了很多资料,进行了一个大致的分析. 1.cortex M3的复位过程(来自官方资料) 上述开机启动流程比较详细,内容较为全面,但部分步骤可以省略(红字可省略 ...