官网

功能

1.支持简体中文和繁体中文字符。
2.支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字。
3.支持多音字,即可以获取一个中文字符的多种发音。
4.支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 "ˉ",阳平"ˊ",上声"ˇ",去声"ˋ")的输出。
5.能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。pinyin4j是一个支持将中文转换到拼音的Java开源类库。

代码

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;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;/*** @program: ems* @description: 中文字符和拼音之间的转换*/public class Pinyin4jUtil {enum Type {UPPERCASE,LOWERCASE,FIRSTUPPER}/*** 转换全部大写* @param str 字符串* @return str为宇航员 ,return获取到的是YHY* @throws BadHanyuPinyinOutputFormatCombination*/public static String toPinYinUppercase(String str) throws BadHanyuPinyinOutputFormatCombination{return toPinYin(str, "", Type.UPPERCASE);}/*** 转换全部大写* @param str 字符串* @param spera 转换字母间隔加的字符串,如果不需要为""* @return str为宇航员 ,spera为** return获取到的是Y**H**Y* @throws BadHanyuPinyinOutputFormatCombination*/public static String toPinYinUppercase(String str,String spera) throws BadHanyuPinyinOutputFormatCombination{return toPinYin(str, spera, Type.UPPERCASE);}/*** 转换全部小写* @param str 字符串* @return str为宇航员 ,return获取到的是yhy* @throws BadHanyuPinyinOutputFormatCombination*/public static String toPinYinLowercase(String str) throws BadHanyuPinyinOutputFormatCombination{return toPinYin(str, "", Type.LOWERCASE);}/*** 转换全部小写* @param str 字符串* @param spera 转换字母间隔加的字符串,如果不需要为""* @return   str为宇航员 ,spera为** return获取到的是y**h**y* @throws BadHanyuPinyinOutputFormatCombination*/public static String toPinYinLowercase(String str,String spera) throws BadHanyuPinyinOutputFormatCombination{return toPinYin(str, spera, Type.LOWERCASE);}/*** 获取拼音首字母(大写)* @param str 字符串* @return str为宇航员 ,return获取到的是Y* @throws BadHanyuPinyinOutputFormatCombination 异常信息*/public static String toPinYinUppercaseInitials(String str) throws BadHanyuPinyinOutputFormatCombination {String initials = null;String py = toPinYinUppercase(str);if(py.length()>1){initials = py.substring(0, 1);}if(py.length()<=1){initials = py;}return initials.trim();}/*** 获取拼音首字母(小写)* @param str 字符串* @return str为宇航员 ,return获取到的是y* @throws BadHanyuPinyinOutputFormatCombination 异常信息*/public static String toPinYinLowercaseInitials(String str) throws BadHanyuPinyinOutputFormatCombination {String initials = null;String py = toPinYinLowercase(str);if(py.length()>1){initials = py.substring(0, 1);}if(py.length()<=1){initials = py;}return initials.trim();}/*** 将str转换成拼音,如果不是汉字或者没有对应的拼音,则不作转换* @param str    字符串* @param spera  默认,可为""* @param type   转换格式* @return 按照转换格式转换成字符串* @throws BadHanyuPinyinOutputFormatCombination 异常信息*/public static String toPinYin(String str, String spera, Type type) throws BadHanyuPinyinOutputFormatCombination {if(str == null || str.trim().length()==0) {return "";}HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);if(type == Type.UPPERCASE) {format.setCaseType(HanyuPinyinCaseType.UPPERCASE);} else{format.setCaseType(HanyuPinyinCaseType.LOWERCASE);}String py = "";String temp = "";String[] t;for(int i=0;i<str.length();i++){char c = str.charAt(i);if((int)c <= 128)  {py += c;}else{t = PinyinHelper.toHanyuPinyinStringArray(c, format);if(t == null) {py += c;}else{temp = t[0];if(type == Type.FIRSTUPPER) {temp = t[0].toUpperCase().charAt(0)+temp.substring(1);}if(temp.length()>=1){temp = temp.substring(0, 1);}py += temp+(i==str.length()-1?"":spera);}}}return py.trim();}/*** 获取汉字串拼音,英文字符不变** @param chinese 汉字串* @return 汉语拼音*/public static String toPinYinSpell(String chinese) {StringBuilder pybf = new StringBuilder();char[] arr = chinese.toCharArray();HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);for (int i = 0; i < arr.length; i++) {if (arr[i] > 128) {try {pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}} else {pybf.append(arr[i]);}}return pybf.toString();}/*** 汉字转换位汉语全拼,英文字符不变,特殊字符丢失 支持多音字,生成方式如(重当参:zhongdangcen,zhongdangcan,chongdangcen ,chongdangshen,zhongdangshen,chongdangcan)** @param chines*            汉字* @return 拼音*/public static String toPinYinMultiple(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 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;}}

测试

import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.junit.Test;/*** @program: ems* @description: 拼音工具类测试类*/
public class Pinyin4jUtilTest {@Testpublic void testPinyin() throws BadHanyuPinyinOutputFormatCombination {String first1 = Pinyin4jUtil.toPinYinUppercase("手动!");String first2 = Pinyin4jUtil.toPinYinUppercase("更丰富", "**");String first3 = Pinyin4jUtil.toPinYinLowercase("1撒大声地");String first4 = Pinyin4jUtil.toPinYinLowercase("对对对","**");String first5 = Pinyin4jUtil.toPinYinUppercaseInitials("是是是");String first6 = Pinyin4jUtil.toPinYinLowercaseInitials("啊啊啊");String first7 = Pinyin4jUtil.toPinYinSpell("2多岁的s");String first8 = Pinyin4jUtil.toPinYinMultiple("当参长");System.out.println(first1);System.out.println(first2);System.out.println(first3);System.out.println(first4);System.out.println(first5);System.out.println(first6);System.out.println(first7);System.out.println(first8);}
}

参考:
https://blog.csdn.net/cl11992/article/details/77145962
https://www.cnblogs.com/liaojie970/p/5490180.html

Pinyin4j 的使用 Pinyin4jUtils工具类相关推荐

  1. Pinyin4j之Pinyin4jUtils工具类

    介绍 Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制. Pinyin4jUtils工具类是进行包装,进行支持一一些转换方法 支持方法 输入一个字符串可以给我 ...

  2. pinyin4j工具类

    pinyin4j工具类 1. 导入依赖 <dependency><groupId>com.belerweb</groupId><artifactId>p ...

  3. 汉字转拼音 java_Java汉字转拼音工具类完整代码实例

    添加依赖 com.belerweb pinyin4j 2.5.1 工具类代码: public class PinYinUtils { public static HanyuPinyinOutputFo ...

  4. 汉字转拼音工具类,依赖Pinyin4J

    汉字转拼音工具类,依赖Pinyin4J Maven 坐标 <dependency><groupId>com.belerweb</groupId><artifa ...

  5. 汉字转拼音工具类pinyin4j

    依赖jar包 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</a ...

  6. java pinyin4j.jar 下载_Java pinyin4j 工具类实现代码分享

    工具类代码:package com.what21.util.pinyin; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourc ...

  7. pinyin4j汉字转换拼音的工具类

    import net.sourceforge.pinyin4j.PinyinHelper;/*** 功能说明:汉字转换拼音工具类* * @author LZG*/ public class Pinyi ...

  8. Java实用工具类-将汉字转为拼音

    1. 导入对应的jar包 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j ...

  9. java 中文转拼音_JAVA 将中文转化为拼音工具类

    将pinyin4j-2.5.0.jar (附件中有,记得解压)加入到classpath中. 工具类PinyinUtils代码见下:package com.test.utils; import net. ...

最新文章

  1. [转]英语飙升的好方法
  2. 微软网站下载XPerf没有成功
  3. 斑马技术发布《2022年中国医院愿景研究》:未来5年,超过90%的临床医生将采用移动技术...
  4. Hadoop之HDFS文件操作
  5. delphi dbgrideh 遍历每一个单元格_真香!我用Python 制作了一个迷宫游戏
  6. matlab subplot(figure)如何设置使得图像最终显示出来不一样大小
  7. [转载] python中list与string的转换
  8. 十八、完成登录与注册页面的前端
  9. 备忘录 | 当我每晚闲暇时我在干什么(1)
  10. 要重复多少次变成潜意识_速读记忆相关:量变到质变,首先要做的是不断重复...
  11. 基本流水线与记分牌算法和Tomasulo算法
  12. Android APP连接 MySQL
  13. 芯片解密STM32F100VB 芯片基本特性
  14. 2020博客之星年度总评选,我来啦
  15. MGCtoken与IMtoken哪个好?安全吗?
  16. Project 1:文章抄袭自动检测分析项目
  17. CA、根证书、数字证书、数字证书颁发的流程
  18. Chrome浏览器收藏本地存储位置
  19. EduCoder-Web程序设计基础-html5—二维码名片制作-(第1关:二维码名片页面的结构设计)(第2关:二维码名片页面的样式设计)
  20. 记录自己安装黑苹果后的archlinux启动引导修复过程

热门文章

  1. scanf输入数组_清除C / C ++中的输入缓冲区,妈妈再也不用担心我的学习
  2. linux进程泄露命令明文参数,sshpass 使Linux可以明文参数输入SSH密码(示例代码)
  3. modbus-crc16——c语言
  4. Python python 五种数据类型--字符串
  5. 大型互联网系统的监控流水线
  6. JavaScript循环及练习
  7. Json的反序列化 .net Newtonsoft.Json
  8. 【转】Linux下gcc编译生成动态链接库*.so文件并调用它
  9. 从零开始学习ASP.NET MVC 入门
  10. 数智德州,创新未来 | 智慧城市赛题上线山东大赛德州分赛场