汉字转换为汉语拼音首字母,英文字符不变,特殊字符丢失 支持多音字,生成方式如(长沙市长:cssc,zssz,zssc,cssz)

首先需Pinyin4j的jar包,代码如下,可直接使用

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++) {// 每一组集合与上一次组合的MapMap<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);*/String pinyin = Pinyin4jUtil.converterToFirstSpell(str).split(",")[0];System.out.println(str + " short pin yin :" + pinyin);}}

工具类-汉字转为汉语拼音首字母相关推荐

  1. java首字母大写工具类_StringUtil 字符串工具类 将一个字符串的首字母改为大写或者小写 将一 联合开发网 - pudn.com...

    StringUtil 所属分类:Java编程 开发工具:Java 文件大小:2KB 下载次数:14 上传日期:2011-12-26 09:50:51 上 传 者:曲欣亮 说明:  字符串工具类 将一个 ...

  2. 项目小方便--取汉语拼音首字母和字符串比较函数

    壹:取汉语拼音首字母的函数 在做工程项目建模的时候,我们时常用字段的汉语拼音首字母来定义列名;如果手工取下来将是一件非常烦人的工作;此函数就用来取汉字的汉语拼音首字母,解决我们头疼的问题 代码如下: ...

  3. 汉语拼音首字母处理工具类

    文章目录 1.正则表达式来判断字符串中是否包含字母 2.获得汉字首字母(通常用作通讯录检索) 3.获得汉语拼音首字母简称 4.将字符串中的中文转化为拼音,英文字符不变 5.汉字转换位汉语拼音首字母,英 ...

  4. java 汉字 字母_JAVA获取中文汉字字符串拼音首字母,英文字符不变的工具类

    java在处理项目需求时,有时需要排序,尤其是中文名字按0-9,A-Z进行首字母排序,这时候就需要首先要得到中文字符串的首字母,然后按照字母顺序进行排序,不多说,直接上代码,看java如何获取中文字符 ...

  5. java汉字转拼音和获取汉语拼音首字母

    需要加入的jar包 <!-- pinyin4j --><dependency><groupId>com.belerweb</groupId><ar ...

  6. java汉字转换拼音,获取汉字串拼音首字母

    首先要下载  pinyin4j  的jar包 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j ...

  7. C# 获取汉字的拼音首字母(转)

    原文:https://blog.csdn.net/younghaiqing/article/details/62417269 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicod ...

  8. C# 获取汉字的拼音首字母和全拼(含源码)

    C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手 ...

  9. (转)C# 获取汉字的拼音首字母和全拼(含源码)[A]

    https://blog.csdn.net/younghaiqing/article/details/62417269 C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是 ...

最新文章

  1. 惊了!计算机视觉还可以这么玩?
  2. *:教育产品 规范销售
  3. 用python画玫瑰花简单-利用python的turtle库画一朵简单的玫瑰花,并添加文字
  4. github密码格式_如何使用GitHub构建一个简单的网页 (不用框架版本)
  5. 【c++】13.必须用指针取值的情况.md
  6. lsof查看占用高_查看端口占用情况lsof,并关闭对应进程kill
  7. 解决IE10以下对象不支持“bind“属性或方法
  8. a频繁连接不上redis_连接不到redis Caused by:..._慕课问答
  9. 电脑键盘练习_三款神器!超越键盘飞毛腿!
  10. gradle命令无法识别
  11. 半个月可以写出一个电脑操作系统吗?
  12. 单选按钮用法, 选择的值
  13. 语言的学习 —— 西班牙语(español)
  14. 设计模式(三) 工厂模式
  15. Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
  16. Python问题解决6:使用jupyter notebook时安装第三方库提示升级pip,pip升级不成功一直报错
  17. JS内功修炼-基础篇
  18. 聚焦“教-学-评-测-练-管一体化”,推动新型人才培养
  19. 总结:云原生架构理解
  20. 牛客网-精华专题-前端校招面试题目合集

热门文章

  1. 高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了
  2. VC++中unhandled exception的处理
  3. 数据报表类(BI)项目测试应该如何去啃?
  4. 修改服务器tcp会话数,windows2012服务器TCP连接数
  5. javascript设计模式-策略模式(Strategy)
  6. python使用logging打印信息到日志文件中
  7. 直方图匹配(直方图规定化)
  8. HTML5 新增的结构元素——能用不代表用对了
  9. python功率谱,直接法和间接法
  10. dp 这个单位是安卓发明的么?为什么 px=dp*(dpi/160)?