java字符串转换为拼音_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 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相关推荐
- java 中文转成_Java实现汉字转换为拼音 [转]
代码说明: Java实现汉字转换为拼音的GUI版本. GUI代码部分: /** * @(#)CnToSpellGUI.java * kindani * 2004-10-25?? * */ import ...
- java 实现汉字转换拼音_Java实现汉字转换为拼音
# re: Java实现汉字转换为拼音 2006-11-24 15:06 芦苇 JAVA将汉字转化成拼音的方法 /** *//** ################################## ...
- java把汉字转换成拼音_Java实现汉字转换为拼音
本文的核心代码取自easydozer的blog:http://blog.csdn.net/easydozer/ 代码说明: Java实现汉字转换为拼音的GUI版本. GUI代码部分: /** * @( ...
- java 实现汉字转换拼音_JAVA实现汉字转拼音功能代码实例
JAVA中汉字转拼音的方法并不复杂,可以使用pinyin4j包来实现. 一.下载pinyin4j的架包,并导入项目中,如下: 如果是maven项目,maven依赖如下: com.belerweb pi ...
- java 拼音识别_JAVA实现汉字转拼音
packageedu.ws;importcom.github.stuxuhai.jpinyin.ChineseHelper;importcom.github.stuxuhai.jpinyin.Piny ...
- mysql 汉字拼音_Mysql中文汉字转拼音的实现(每个汉字转换全拼)
一.创建拼音对照表 -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` varchar(255) CHARAC ...
- java 判断汉字音调_JAVA实现汉字转换为拼音 自动识别常用多音字 JPinyin
JAVA实现汉字转换为拼音 自动识别常用多音字 JPinyin 使用JPinyin,可以实现汉字转换为拼音,并自动识别常用多音字,还支持简体转换为繁体,检查是否为简体,是否为繁体,是否为中文字符等功能 ...
- java获取汉字拼音_Java 根据汉字获取其拼音
pom.xml导入pinyin4j的依赖 com.belerweb pinyin4j 2.5.1 汉字转拼音工具类package com.bizcloud.function; import net.s ...
- java汉字的拼音首字母_Java 获取汉字的拼音首字母
Java 获取汉字的拼音首字母: pom.xml 引用 pinyin4j 包: com.belerweb pinyin4j 2.5.0 PinyinUtil 类: package com.xxx.co ...
最新文章
- 小程序获取图片的宽高
- 一个学术 导航网站----科塔学术
- 在winform程序中启动wpf窗体
- Spring JDBC-事务方法嵌套调用解读
- 3.1.2 操作系统内存管理管些什么?
- java thrift client_使用thrift的java client调用python server
- JAVA的彻底删除重下
- bat-bat-bat (重要的事情说三遍)
- java移动文件导致tomcat死掉_原 netty导致tomcat假死
- 15.2. 网络监控
- 2022年寒假ACM练习2(待补题)
- 【2017西安邀请赛:A】XOR(区间异或最大值多次查询---线段树+线性基合并)
- c语言课程设计题目 吃豆子,C语言吃豆子游戏
- 【2021自我知识蒸馏】Extracting knowledge from features with multilevel abstraction
- 用支付宝和微信可以直接跳转拉起支付,API搭建比较方便第三方支付接口首选杉德比较靠谱,
- Nginx 负载均衡动静分离配置
- Android.mk 包含问题带来的so.toc needed by 错误
- P5550 Chino的数列
- python如何期货交易_能用python的期货交易软件
- 同花顺_代码解析_交易系统_J01_08
热门文章
- 【Unity3D日常开发】获取天气信息以及地方位置
- Java 假设一张足够大的纸,纸张的厚度为0.5 毫米。请问对折多少次以后,可以达到珠穆朗玛峰的高度(最新数据:8844.43 米)。请编写程序输出对折次数
- 默克尔树 Merkle树之Go语言实现
- C++入门总结(一)
- php mysql utf 8_PHP+MySQL中对UTF-8,UTF8(utf8),set names gbk 的理解
- 2021Java进阶学习资料!java自学宝典pdf下载
- Navicat Premium 15 完全卸载
- slack 使用说明_我如何使用Slack作为自己的个人助理
- DBeaver显示系统数据库不全
- gulp自动化环境搭建,自动化解决方案