Github个人博客:https://joeyos.github.io

汉字转换为拼音

用一种简单的方法将字符串转化为拼音:

  1. 将需要转换的字符串t1里的字符t1[i]按照t3的格式格式化为拼音,并复制给t2
  2. 如果t1[i]不是汉字,则不转换,直接把t1[i]复制给t2
  3. 将t2首字母大写,复制给t4

这里将用到pinyin4j.jar包,请自行百度下载。

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;public class Chinese2Pinyin {public static String getPinyin(String src) {char[] t1 = null;t1 = src.toCharArray();String[] t2 = new String[t1.length];HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写格式t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 有无音标t3.setVCharType(HanyuPinyinVCharType.WITH_V);String t4 = "";try {for (int i = 0; i < t1.length; i++) {// 判断是否为汉字字符// if(t1[i] >= 32 && t1[i] <= 125)//ASCII码表范围内直接返回if (String.valueOf(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 转化为拼音t4 += t2[0].substring(0, 1).toUpperCase() + t2[0].substring(1);// 首字母大写} else {t4 += String.valueOf(t1[i]);// 不是汉字不处理}}} catch (BadHanyuPinyinOutputFormatCombination e1) {e1.printStackTrace();}return t4;}public static void main(String[] args) {String s = getPinyin("西安电子科技大学");System.out.println(s);String s1 = getPinyin("西安");System.out.println(s1);String s2 = getPinyin("成都");System.out.println(s2);// ChengDu}
}

运行结果为:

XiAnDianZiKeJiDaXue
XiAn
ChengDou

可以看到,“成都(du)”被转化成了“ChengDou”,这是因为pinyin4j.jar无法识别多音字的原因。如果是多音字,t2[k]存放着某个字符t1[i]的多个拼音,是一个数组,默认取t2[0]为该字的拼音。

多音字处理

这里采用查字典的方法,将需要转换的字符子串与字典里的词组进行匹配,如果匹配到,这把字典里的读音作为改字的拼音。单字随机分配发音,如果是字典里的常用单字,则按照字典发音。
首先,下载多音字字典文件:下载字典

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;import org.apache.commons.lang.StringUtils;import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;public class Chinese2Pinyin {public static Map<String, String> dictionary = new HashMap<String, String>();static String filePath = "C:\\dict\\duoyinzi_pinyin.txt";// 加载多音字词典static {BufferedReader br = null;try {File file = new File(filePath);br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));String line = null;while ((line = br.readLine()) != null) {String[] arr = line.split("#");if (StringUtils.isNotEmpty(arr[1])) {String[] sems = arr[1].split(" ");for (String sem : sems) {if (StringUtils.isNotEmpty(sem)) {dictionary.put(sem, arr[0]);}}}}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}}public static String getPinyin(String src) {char[] t1 = null;t1 = src.toCharArray();String[] t2 = new String[t1.length];HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写格式t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 有无音标t3.setVCharType(HanyuPinyinVCharType.WITH_V);String t4 = "";try {for (int i = 0; i < t1.length; i++) {// 判断是否为汉字字符// if(t1[i] >= 32 && t1[i] <= 125)//ASCII码表范围内直接返回if (String.valueOf(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 转化为拼音//如果是单个汉字,不处理,随机分配拼音if (i != t1.length - 1 && t1.length != 1) {String dic = String.valueOf(t1[i]) + String.valueOf(t1[i + 1]);for (String py : t2) {if (py.equals(dictionary.get(dic)) || py.equals(dictionary.get(String.valueOf(t1[i])))) {t2[0] = py;// 把t2[0]作为存放正确发音的区域break;}}} else if (t1.length != 1) {String dic = String.valueOf(t1[i - 1]) + String.valueOf(t1[i]);for (String py : t2) {if (py.equals(dictionary.get(dic)) || py.equals(dictionary.get(String.valueOf(t1[i])))) {t2[0] = py;// 把t2[0]作为存放正确发音的区域break;}}}t4 += t2[0].substring(0, 1).toUpperCase() + t2[0].substring(1);// 首字母大写} else {t4 += String.valueOf(t1[i]);// 不是汉字不处理}}} catch (BadHanyuPinyinOutputFormatCombination e1) {e1.printStackTrace();}return t4;}public static void main(String[] args) {String s = getPinyin("西安电子科技大学");System.out.println(s);String s1 = getPinyin("西安");System.out.println(s1);String s2 = getPinyin("成都");System.out.println(s2);// ChengDu}
}

运行结果为:

XiAnDianZiKeJiDaXue
XiAn
ChengDu

java将汉字字符串转换为拼音(包含多音字)相关推荐

  1. java字符串转换为拼音_JAVA实现汉字转换为拼音 pinyin4j/JPinyin

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

  2. asp.net 获取汉字字符串的拼音首字母,含多音字

    需求:在很多时候数据查询的时候,我们希望输入某个人姓名的拼音首字母进行查询,例如"潘长江",输入"pcj",就能搜索潘长江相关信息. 实现: #region 获 ...

  3. JAVA获取汉字首字母拼音

    JAVA获取汉字首字母拼音 jar导入 工具类 jar导入 <dependency><groupId>com.belerweb</groupId><artif ...

  4. 在Java中从字符串转换为双精度

    Given a string value and we have to convert it into a double. 给定一个字符串值,我们必须将其转换为双精度型. Java conversio ...

  5. PHP中文转换为数组,PHP文本处理之中文汉字字符串转换为数组

    在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen - 获取字符串的长度 mb_sub ...

  6. java实现汉字文字转换拼音(全拼和简拼)工具包

    java实现汉字文字转换拼音(全拼和简拼)工具包 话不多说,直接上代码,调用即可 /** * 得到 全拼 * @param str * @return */public static String g ...

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

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

  8. java将汉字转化为拼音

    在日常的开发中,可能需要将汉字转化为拼音,例如想要某些城市的开头拼音大写字母作为城市的简称,全国有几百个城市,如果需要一个一个自己拼那太麻烦了,在 Java 中,有人开发这样一个工具. 下面看一下如何 ...

  9. java将汉字转成拼音首字母大写字母_java实现将汉字转为首字母、拼音

    本文转自java实现将汉字转为拼音 作者itRed 本人仅稍作整理,并提出一些问题.问题的话暂时没时间处理,等以后有时间了再更新. 测试参数 String info="汉字转换为拼音&quo ...

  10. java把汉字转换成拼音的2种方式

    java程序将汉字转成拼音的两种方法 1.使用pinyin4j将汉字转成拼音,附件为pinyin4j的jar包 Java代码   import net.sourceforge.pinyin4j.Pin ...

最新文章

  1. PI-安装SoapUI on Windows
  2. wdnas群晖nas_西数WD NAS红盘 WD140EFFX 14TB HDD和 SA500 1TB SSD开箱拆解评测
  3. 吴枫 python小课账号_无门槛速学编程——Python小短课,自上而下分而治之
  4. uboot向linux传递输出任何log信息的方法
  5. BlockingQueue的使用
  6. in作为介词的用法_(完整版)介词in重要用法归纳
  7. lnmp编译安装mysql_LNMP一键包不安装mysql | 厘米天空
  8. hibernate级联删除问题
  9. PHP GUID和UUID生成类
  10. phpmyadmin-错误:配置文件权限错误,不应任何用户都能修改!这里有答案
  11. 提供了一个UBUNTU安装NVIDIA驱动的脚本的下载
  12. php和app关系,php在app开发中的应用
  13. 数字图像处理合集终章——车流量统计(后附源码)
  14. VS2015的下载地址和安装教程
  15. bat批处理注释方法总结
  16. Science和Nature杂志论文异同简述
  17. App Store ipv6 审核一直被拒绝
  18. 命名空间“Microsoft”中不存在类型或命名空间名“AspNet”(是否缺少程序集引用?)
  19. 信用评分卡 Week3(2)
  20. python批量删缩进_鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频?...

热门文章

  1. 软件默认安装路径注册表更改问题
  2. Java开发环境安裝教程
  3. 麦克斯韦电磁场理论基础
  4. php 扩展官,常用的php扩展 - 采集侠官方博客 - 织梦(dedecms)模块插件原创基地
  5. Linux 在线扫描热添加的SCSI设备
  6. ASP.NET在Web窗体上输出九九乘法表
  7. 用QT实现一个简单的桌面宠物
  8. java structs_java深入探究12-框架之Structs
  9. 怎么把电脑计算机桌面调出来,手把手教你电脑怎么设置屏保
  10. WPS 2000使用技巧点滴