JAVA获取字符串首字拼音和全拼
JAVA获取字符串首字拼音或者全部拼音,用的是pinyin4j。
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.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;public class Pinyin4jUtil {/*** 提取首个字符的首字母,其他返回** * @param str* @return String*/public static String getFirstPinYinHeadChar(String str) {StringBuffer pybf = new StringBuffer();char word = str.charAt(0);// 提取汉字的首字母String[] pinyinArray;// 是否是因为字母if (word > 128) {pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);// 如果不是汉字,就返回*if (pinyinArray != null) {pybf.append(pinyinArray[0].charAt(0));} else {pybf.append("*");}} else {// 是字母直接返回,不是返回*if (Character.isLetter(word)) {pybf.append(word);} else {pybf.append("*");}}// 全部返回大写return pybf.toString().toUpperCase();}/*** 将汉字转换为全拼* * @param src* @return String*/public static String getPinYin(String src) {char[] t1 = null;t1 = src.toCharArray();// System.out.println(t1.length);String[] t2 = new String[t1.length];// System.out.println(t2.length);// 设置汉字拼音输出的格式HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);t3.setVCharType(HanyuPinyinVCharType.WITH_V);String t4 = "";int t0 = t1.length;try {for (int i = 0; i < t0; i++) {// 判断是否为汉字字符// System.out.println(t1[i]);if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后} else {// 如果不是汉字字符,直接取出字符并连接到字符串t4后t4 += Character.toString(t1[i]);}}} catch (BadHanyuPinyinOutputFormatCombination e) {// TODO Auto-generated catch blocke.printStackTrace();}return t4;}/*** 提取每个汉字的首字母* * @param str* @return String*/public static String getPinYinHeadChar(String str) {String convert = "";for (int j = 0; j < str.length(); j++) {char word = str.charAt(j);// 提取汉字的首字母String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);if (pinyinArray != null) {convert += pinyinArray[0].charAt(0);} else {convert += word;}}return convert;}/*** 将字符串转换成ASCII码* * @param cnStr* @return String*/public static String getCnASCII(String cnStr) {StringBuffer strBuf = new StringBuffer();// 将字符串转换成字节序列byte[] bGBK = cnStr.getBytes();for (int i = 0; i < bGBK.length; i++) {// System.out.println(Integer.toHexString(bGBK[i] & 0xff));// 将每个字符转换成ASCII码strBuf.append(Integer.toHexString(bGBK[i] & 0xff) + " ");}return strBuf.toString();}/*** 汉字转换位汉语拼音首字母,英文字符不变,特殊字符丢失 支持多音字,生成方式如(长沙市长: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;}}
下面是使用到的jar包:
pinyin4j-2.5.0.jar
http://download.csdn.net/detail/kokjuis/9672141 点击打开链接
JAVA获取字符串首字拼音和全拼相关推荐
- JAVA获取汉字首字母拼音
JAVA获取汉字首字母拼音 jar导入 工具类 jar导入 <dependency><groupId>com.belerweb</groupId><artif ...
- JS实现获取汉字首字母拼音、全拼音及混拼音的方法
本文实例讲述了JS实现获取汉字首字母拼音.全拼音及混拼音的方法.分享给大家供大家参考,具体如下: 这里需要用到一个js获取汉字拼音的插件,可点击此处本站下载. 运行效果如下: 完整示例代码: ? 1 ...
- 获取字符串首字母拼音
#region 获取字符串首字母拼音/// <summary>/// 获得一个字符串的汉语拼音码,XDesigner编制/// </summary>/// <param ...
- PHP获取字符串首字母拼音类
getInitialsOfName.php <?php/*** 获取字符串首字母拼音类* 英文字串:不变返回(包括数字) abc123 => abc123* 中文字符串:返回拼音首字符 王 ...
- java实现汉字文字转换拼音(全拼和简拼)工具包
java实现汉字文字转换拼音(全拼和简拼)工具包 话不多说,直接上代码,调用即可 /** * 得到 全拼 * @param str * @return */public static String g ...
- Java获取名字首字母拼音并按名字拼音分组工具类
1. maven <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j< ...
- C# 根据汉字获取首字母拼音或全拼
第一种方法.简单快速 若是求快,可以用下面这个方法,不需要什么库,直接写就完事 调用GetPYstring ,传入"世界和平",返回"SJHP" public ...
- 关键字的首字母拼音和全拼搜索
/*** @author ChineseSpelling* 所有全拼集合 汉字转拼音 使用工具类*/ public class ChineseSpelling {private static int[ ...
- java 获取拼音码_Java获取汉字拼音的全拼和首拼实现代码分享
import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java ...
最新文章
- Git Bash Here 中文显示乱码,有遮挡, 的处理方法
- 发布了!2020年AI人才发展报告,最高补助1000万!
- POJ-2386-Lake Counting
- python 发送邮件解决所有乱码问题
- hdu1058(dp||优先队列)
- ZOJ 1048|POJ 1004|HDU1064 Financial Management
- 写出一段代码将链表中的两个节点位置互换位置_面试 leetcode 算法专题系列(二)—— 链表...
- 创建mysql数据库图解_mysql数据库怎么创建外键?(图文+视频)
- 怎么用计算机弹c哩c哩,计算器音乐c哩c哩乐谱 | 手游网游页游攻略大全
- UIScrollView加约束
- windows获取cmd回显以及获取路径
- 阿里云 ECS Ubuntu 14.04 无法访问之磁盘 IO 跑满问题排查
- 国内外组态软件对比分析(InTouch、WinCC、iFix、iNeuOS)
- 关于AD9各种布线总结(很详细)
- html调用矢量小图标的方法,Web 前端矢量小图标的使用方法
- 提前体验饱受期待的Windows Terminal
- 【win10】设置电脑固定IP,解除固定IP
- 爱普生发票打印机 每次连续打印发票,都跳页,中间一张空白
- 【论文笔记】Neural Machine Translation by Jointly Learning to Align and Translate
- Fite-C02-1班成员学习进度记录
热门文章
- ArcGIS简单的三维演示
- Python爬取各种类型网站数据(视频,图片居多)
- R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型
- windows下mysql8初始化
- Qt开发技术:Qt富文本(一)富文本介绍、文档结构
- mysql免费常用编译器_20款最好的免费的IDES和编辑器
- 华为手机在计算机里怎么隐藏游戏,华为手机游戏模式怎么设置
- house robbers
- Ubuntu Core 将支持物联网 Matter
- 【转载】Shell图形化监控网络流量