两个工具包都可以实现: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实现汉字转拼音的更多相关文章

  1. java实现汉字转为拼音

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

  2. JAVA实现汉字转换为拼音 pinyin4j/JPinyin

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

  3. [pinyin4j] java版汉字转换拼音(大小写)

    pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2. ...

  4. java实现将汉字转为拼音

    有时候为了方便操作程序的开发,需要将汉字转为拼音等操作.下面这个是自己结合网上的资料,加上自己在公司项目中的亲自实践.完整的实现了将汉字转为拼音的操作.这个Demo只是负责将其转换,在main方法中测 ...

  5. java中汉字自动转换成拼音

    java中汉字自动转换成拼音 1.需要下载jar包 pinyin4j.2.5.0.jar ,加入到WEB-INF下的lib里边,右键add to bulid path. 2.[代码]PinYinUti ...

  6. java汉字转拼音以及得到首字母通用方法

    package oa.common.utils;   import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.piny ...

  7. 汉字转拼音的Java类库:JPinyin

    JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5范围及3007(〇 ...

  8. [转]Java汉字按照拼音排序

    最近项目上使用到汉字排序的问题,网上搜索了一下后普遍使用下面的方法比较. @Test public void test_sort_pinyin() { Collator cmp = Collator. ...

  9. java 汉字转拼音

    先决条件: pinyin4j.jar(Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换.拼音输出格式可以定制.) 下载地址:http://pan.baidu.com/share/l ...

随机推荐

  1. Bytom侧链Vapor源码浅析-节点出块过程

    Bytom侧链Vapor源码浅析-节点出块过程 在这篇文章中,作者将从Vapor节点的创建开始,进而拓展讲解Vapor节点出块过程中所涉及的源码. 做为Vapor源码解析系列的第一篇,本文首先对Vap ...

  2. Springboot开启事务的支持

    主要分为两步 步骤一.在main方法加上@EnableTransactionManagement注解: @SpringBootApplication @EnableTransactionManagem ...

  3. C#设计模式之11-享元模式

    享元模式(Flyweight Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/409 访问. 享元模式属 ...

  4. DRF基础操作流程

    Django Rest_Framework 核心思想: 缩减编写api接口的代码 -->DRF Django REST framework是一个建立在Django基础之上的Web 应用开发框架, ...

  5. Windows下,配置VS Code的Java开发环境

    Windows下,配置VS Code的Java开发环境 前言 最近痴迷于VS Code的开发环境配置,原因就在于它的轻巧和免费,还能当一个非常棒的文本编辑器.如果之前你配置过VS Code并且失败了, ...

  6. DRF内置认证组件之自定义认证系统

    自定义token认证 我们知道,在django项目中不管路由以及对应的视图类是如何写的,都会走到 dispatch 方法,进行路由分发, 在阅读 APIView类中的dispatch 方法的源码中,有 ...

  7. 一、Spring的基本应用

    1.spring导包 导入maven包 <dependencies> <dependency> <groupId>org.springframework</g ...

  8. 关于Dapper实现读写分离的个人思考

    概念相关     为了确保多线上环境数据库的稳定性和可用性,大部分情况下都使用了双机热备的技术.一般是一个主库+一个从库或者多个从库的结构,从库的数据来自于主库的同步.在此基础上我们可以通过数据库反向 ...

  9. 12 种使用 Vue 的最佳做法

    随着 VueJS 的使用越来越广泛,出现了几种最佳实践并逐渐成为标准. 1.始终在 v-for 中使用 :key 在需要操纵数据时,将key属性与v-for指令一起使用可以让程序保持恒定且可预测. 这 ...

  10. Linux top详解

    命令 top 参数说明: d:改变显示的更新速度 q:  没有任何延迟的显示速度 c:切换显示模式,共有两种模式,一是只显示执行档的名称,零一种显示完整的路径与名称S:累计模式,会将已完成或消失的子行 ...