JAVA实现汉字转拼音
两个工具包都可以实现:pinyin4j/JPinyin
pinyin4j
第一个是使用pinyin4j的jar,此jar对多音字语句的处理不太理想
package edu.ws; 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汉字转拼音工具类
*/
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) {
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();
}
}
测试:
package edu.ws;
public class Test {
public static void main(String[] args) {
new ToPinYinTest().changePinYinTest();
new ToPinYinTest().changechar();
}
static class ToPinYinTest {
private ChangeToPinYin changeToPinYin;
public void changePinYinTest(){
String str = "你在做什么?what are you doing?";
System.out.println(changeToPinYin.getStringPinYin(str));
}
public void changechar(){
char c = '你';
System.out.println(changeToPinYin.getCharPinYin(c));
}
}
}
JPinyin
第二个方法使用JPinyin,说是在pinyin4j的jar上进行了优化,可以实现汉字转换为拼音,并自动识别常用多音字,还支持简体转换为繁体,检查是否为简体,是否为繁体,是否为中文字符等功能,下面一段代码简单列举了下汉字转换拼音及简体转换繁体
package edu.ws; import com.github.stuxuhai.jpinyin.ChineseHelper;
import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper; 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('重')); // } }
这里只是简单的介绍了下最基本的功能,有兴趣的可以自行去了解。
JAVA实现汉字转拼音的更多相关文章
- java实现汉字转为拼音
java实现汉字转为拼音: 1.需要导入pinyin4j.jar package com.loo.pinyin; import net.sourceforge.pinyin4j.PinyinHelpe ...
- JAVA实现汉字转换为拼音 pinyin4j/JPinyin
在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方jar支持转换,结合网上很多前辈的代 ...
- [pinyin4j] java版汉字转换拼音(大小写)
pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2. ...
- java实现将汉字转为拼音
有时候为了方便操作程序的开发,需要将汉字转为拼音等操作.下面这个是自己结合网上的资料,加上自己在公司项目中的亲自实践.完整的实现了将汉字转为拼音的操作.这个Demo只是负责将其转换,在main方法中测 ...
- java中汉字自动转换成拼音
java中汉字自动转换成拼音 1.需要下载jar包 pinyin4j.2.5.0.jar ,加入到WEB-INF下的lib里边,右键add to bulid path. 2.[代码]PinYinUti ...
- java汉字转拼音以及得到首字母通用方法
package oa.common.utils; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.piny ...
- 汉字转拼音的Java类库:JPinyin
JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5范围及3007(〇 ...
- [转]Java汉字按照拼音排序
最近项目上使用到汉字排序的问题,网上搜索了一下后普遍使用下面的方法比较. @Test public void test_sort_pinyin() { Collator cmp = Collator. ...
- java 汉字转拼音
先决条件: pinyin4j.jar(Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换.拼音输出格式可以定制.) 下载地址:http://pan.baidu.com/share/l ...
随机推荐
- 创建shell脚本文件
简单来说脚本就是将需要执行的命令保存到文本中,按照顺序(由上往下执行),它是解释型的,不需要 编译 脚本格式 #!/bin/bash或者#!/bin/env bash开头 第一个shell脚本:hel ...
- find the lowest number location
before #设定路径列表Path def find_path2(heightmap, x, y, water_level=557,path=[]): #global path #设定坐标 右0 左 ...
- Vue 页面导出成PDF文件
注意事项 如果导出的页面中设计到图片或者其他文件跨域文件,需要后端服务配合 安装依赖 npm install html2Canvas --save npm install jspdf--save 封装 ...
- 自己动手编写一个Mybatis插件:Mybatis脱敏插件
1. 前言 在日常开发中,身份证号.手机号.卡号.客户号等个人信息都需要进行数据脱敏.否则容易造成个人隐私泄露,客户资料泄露,给不法分子可乘之机.但是数据脱敏不是把敏感信息隐藏起来,而是看起来像真的一 ...
- 轻音少女K-on闹钟,时钟,日历,整点报时
在网上找了很久才找到这个东西, 所以分享出了,方便大家下载 链接: https://pan.baidu.com/s/11wB57F2Td1FPp9RBmTvg 密码: 2xt5
- 第三章 kubernetes核心原理
kubernetes API Server 提供了Kubernetes各类资源对象(如pod,re,service等)的增删改查及watch等Http Rest接口,成为集群内各个功能模块之间数据交互 ...
- 提升团队幸福感之:集成 GitLab && JIRA 实现自动化工作流
佛罗伦萨 - 圣母百花圣殿(图) 前言 GitLab 和 Jira 是平时开发过程中使用非常高频的代码管理系统(开发人员)和项目管理系统(项目管理),通过两套系统的协作完成平常大多数的功能开发,但是两 ...
- Datawhale学数据分析第一章
需要用到的基础知识pandas基础知识参考1,2章https://github.com/datawhalechina/joyful-pandas 1.导入数据tsv 制表符作为分隔符的字段符csv 逗 ...
- VUE数据更新视图不更新的原因
当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue当你修改数组的长度时,例如:vm.items.length = newLength 数组更新只能通过 ...
- Linux三剑客老三---grep
1.Linux三剑客老三 过滤需要的内容,例子:grep -v oldboy hello.txt grep一般常用参数: -a:在二进制文件中,以文本文件的方式搜索数据. -c:计算找到"搜 ...