项目上偶尔要用到关于中文字符串转换为拼音字符串的功能,pinyin4j.jar这个包可以提供相关的功能,非常方便,首先要在maven中pom.xml添加依赖项,如果不用maven,那直接下载对应的jar包添加到项目中即可。

<dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version>
</dependency>

然后以下是一个使用的例子,其中converterToSpell,converterToFirstSpell方法当中文字符串有多音字时,会把所有的多音字组合都输出来,也可以使用discountTheChinese方法去除多音字的多种组合。

package com.fullteem.modules.util;import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;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.exception.BadHanyuPinyinOutputFormatCombination;public class Pinyin4jUtil {/** * 汉字转换位汉语拼音首字母,英文字符不变,特殊字符丢失 支持多音字,生成方式如(长沙市长:cssc,zssz,zssc,cssz) *  * @param chines *            汉字 * @return 拼音 */  public static String converterToFirstSpell(String chines) {  StringBuffer pinyinName = new StringBuffer();  char[] nameChar = chines.toCharArray();  HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();  defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);  defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);  for (int i = 0; i < nameChar.length; i++) {  if (nameChar[i] > 128) {  try {  // 取得当前汉字的所有全拼  String[] strs = PinyinHelper.toHanyuPinyinStringArray(  nameChar[i], defaultFormat);  if (strs != null) {  for (int j = 0; j < strs.length; j++) {  // 取首字母  pinyinName.append(strs[j].charAt(0));  if (j != strs.length - 1) {  pinyinName.append(",");  }  }  }  // else {  // pinyinName.append(nameChar[i]);  // }  } catch (BadHanyuPinyinOutputFormatCombination e) {  e.printStackTrace();  }  } else {  pinyinName.append(nameChar[i]);  }  pinyinName.append(" ");  }  // return pinyinName.toString();  return parseTheChineseByObject(discountTheChinese(pinyinName.toString()));  }  /** * 汉字转换位汉语全拼,英文字符不变,特殊字符丢失 * 支持多音字,生成方式如(重当参:zhongdangcen,zhongdangcan,chongdangcen * ,chongdangshen,zhongdangshen,chongdangcan) *  * @param chines *            汉字 * @return 拼音 */  public static String converterToSpell(String chines) {  StringBuffer pinyinName = new StringBuffer();  char[] nameChar = chines.toCharArray();  HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();  defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);  defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);  for (int i = 0; i < nameChar.length; i++) {  if (nameChar[i] > 128) {  try {  // 取得当前汉字的所有全拼  String[] strs = PinyinHelper.toHanyuPinyinStringArray(  nameChar[i], defaultFormat);  if (strs != null) {  for (int j = 0; j < strs.length; j++) {  pinyinName.append(strs[j]);  if (j != strs.length - 1) {  pinyinName.append(",");  }  }  }  } catch (BadHanyuPinyinOutputFormatCombination e) {  e.printStackTrace();  }  } else {  pinyinName.append(nameChar[i]);  }  pinyinName.append(" ");  }  // return pinyinName.toString();  return parseTheChineseByObject(discountTheChinese(pinyinName.toString()));  }  /** * 去除多音字重复数据 *  * @param theStr * @return */  private static List<Map<String, Integer>> discountTheChinese(String theStr) {  // 去除重复拼音后的拼音列表  List<Map<String, Integer>> mapList = new ArrayList<Map<String, Integer>>();  // 用于处理每个字的多音字,去掉重复  Map<String, Integer> onlyOne = null;  String[] firsts = theStr.split(" ");  // 读出每个汉字的拼音  for (String str : firsts) {  onlyOne = new Hashtable<String, Integer>();  String[] china = str.split(",");  // 多音字处理  for (String s : china) {  Integer count = onlyOne.get(s);  if (count == null) {  onlyOne.put(s, new Integer(1));  } else {  onlyOne.remove(s);  count++;  onlyOne.put(s, count);  }  }  mapList.add(onlyOne);  }  return mapList;  }  /** * 解析并组合拼音,对象合并方案*  * @return */  private static String parseTheChineseByObject(  List<Map<String, Integer>> list) {  Map<String, Integer> first = null; // 用于统计每一次,集合组合数据  // 遍历每一组集合  for (int i = 0; i < list.size(); i++) {  // 每一组集合与上一次组合的Map  Map<String, Integer> temp = new Hashtable<String, Integer>();  // 第一次循环,first为空  if (first != null) {  // 取出上次组合与此次集合的字符,并保存  for (String s : first.keySet()) {  for (String s1 : list.get(i).keySet()) {  String str = s + s1;  temp.put(str, 1);  }  }  // 清理上一次组合数据  if (temp != null && temp.size() > 0) {  first.clear();  }  } else {  for (String s : list.get(i).keySet()) {  String str = s;  temp.put(str, 1);  }  }  // 保存组合数据以便下次循环使用  if (temp != null && temp.size() > 0) {  first = temp;  }  }  String returnStr = "";  if (first != null) {  // 遍历取出组合字符串  for (String str : first.keySet()) {  returnStr += (str + ",");  }  }  if (returnStr.length() > 0) {  returnStr = returnStr.substring(0, returnStr.length() - 1);  }  return returnStr;  }public static void main(String[] args) {String str = "长沙市长";  String pinyin = Pinyin4jUtil.converterToSpell(str);  System.out.println(str+" pin yin :"+pinyin);pinyin = Pinyin4jUtil.converterToFirstSpell(str);System.out.println(str+" short pin yin :"+pinyin);}}

JAVA 中文字符转为拼音字符串相关推荐

  1. PHP将中文字符转为拼音/首字母大写/或其他连接符

    PHP将中文字符转为拼音/首字母大写/或其他连接符 项目中遇到需要将客户的姓名转为首拼并且大写的要求, 提出解决办法 首先建立一个汉字转拼音的类 class PinYin {private $pyli ...

  2. java中文字符转换,Java中文字符转换拼音

    将传入的任意中文字符转换为拼音 (1)多音字只取其中一个读音. (2)生僻字如果没有拼音,使用unknown替代. package com.amgotech; public class Chinese ...

  3. java 将中文字符转为英文,java 将中文字符号转为英文

    java 将中文字符转为英文,java 将中文字符号转为英文 package test;import java.io.UnsupportedEncodingException;public class ...

  4. java实现汉字转为拼音

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

  5. (best!)JAVA中文字符编码问题详解

    转载自:http://blog.csdn.net/youyue/article/details/4580402 JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应 ...

  6. Java 汉字拆分转为拼音 及根据经纬度获取所在位置

    Java 汉字拆分转为拼音 及根据经纬度获取所在位置 java网络代码拼凑人 package com.ruoyi.hfiveinterface.util;import com.alibaba.fast ...

  7. JAVA中文字符编码问题详解

    JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...

  8. java中文字符怎么保证出现正确_JAVA中文字符编码问题详解

    JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...

  9. Java中文字符所占的字节数

    本文由广州疯狂软件java培训为你整理: Java语言中,中文字符所占的字节数取决于字符的编码方式,一般情况下,采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节;采用GB2 ...

最新文章

  1. RabbitMQ 6种工作模式
  2. ibatis 配置参数解析
  3. 使用BPF跟踪Linux内核
  4. 设计模式---设计模式的分类及六大原则
  5. 《深度学习笔记》——listnumpy索引操作的学习笔记
  6. Qemu(纯软实现)架构+KVM(基于kernel模拟硬件)原理(一)
  7. 入门React第二天(函数式组件传值)
  8. matlab散点图注释,MATLAB中散点图的绘制方法
  9. HTML5创意设计简历,35张设计师的创意个人简历信息图
  10. Excel 表格实现多列排序
  11. zzuli1728(数学期望,组合数)
  12. SpringCloud(H版alibaba)之基本框架篇
  13. 有关是否携带首部的随笔
  14. Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别
  15. PHP调用微信wx_JSSDK录音并播放,
  16. Photoshop画笔工具的使用
  17. 立创开源 | 电磁铁——切极电路
  18. Origin科研绘图数据分析技巧(8),Origin软件电脑版下载安装
  19. win10系统远程连接时发生身份验证错误的解决方法
  20. Ubuntu18.04安装fcl库

热门文章

  1. python ip获取位置
  2. 图解大型互联网数据中心典型模型
  3. 【IDEA】IDEA中出现下划标红问题应该怎样解决(一种简单方法)
  4. php+python+java+c+html5+css3等各类IT视频教程合集500T
  5. 教你如何在短期内取得考博英语的高分成绩
  6. 广州python工程师工资怎么样_【广州Python工资|广州Python待遇怎么样】-看准网
  7. 三层架构之业务逻辑层
  8. CSS 字体拉伸 font-stretch属性
  9. 基于FPGA实现手写数字的识别——OpenCL
  10. 激发数学思维!一个烧脑的顶级数学纪录片《维度:数学漫步》完整版,带你漫步数学之美!时长125分,建议先马再看!看完从此爱上数学!