123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package cn.com.ty.lift.common.utils;
- import net.sourceforge.pinyin4j.PinyinHelper;
- /**
- * <p>
- * 汉字转换拼音工具类
- * </p>
- *
- * @author wcz
- * @since 2018/5/9
- */
- public class PinYinUtils {
- /**
- * 拼音中的声调字符
- */
- private static final String PinYinChar = "\\d";
- /**
- * 空字符串""
- */
- private static final String EmptyChar = "";
- /**
- * 获取汉字首字母的方法。如: 张三 --> zs
- * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
- *
- * @param chinese 汉字字符串
- * @return 大写汉子首字母; 如果都转换失败,那么返回null
- */
- public static String toFirstChar(String chinese) {
- return toHanyuPinyinString(chinese,false,false);
- }
- /**
- * 获取汉字首字母的方法。如: 张三 --> ZS
- * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
- *
- * @param chinese 汉字字符串
- * @return 大写汉子首字母; 如果都转换失败,那么返回null
- */
- public static String toFirstCharUpper(String chinese){
- return toHanyuPinyinString(chinese,false,true);
- }
- /**
- * 获取汉字拼音的方法。如: 张三 --> zhangsan
- * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
- *
- * @param chinese 汉字字符串
- * @return 汉字拼音; 如果都转换失败,那么返回null
- */
- public static String toPinYin(String chinese) {
- return toHanyuPinyinString(chinese,true,false);
- }
- /**
- * 获取汉字拼音的方法。如: 张三 --> ZHANGSAN
- * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
- *
- * @param chinese 汉字字符串
- * @return 汉字拼音; 如果都转换失败,那么返回null
- */
- public static String toPinYinUpper(String chinese) {
- return toHanyuPinyinString(chinese,true,true);
- }
- /**
- * <p>
- * 获取汉字拼音的方法。如: 张三 --> zhangsan/ZHANGSAN/zs/ZS
- * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
- * </p>
- * @param chinese 汉字字符串
- * @param isfull true: 全拼, false: 首字母
- * @param toUpperCase true: 大写, false: 小写
- * @return String 拼音字符串
- */
- private static String toHanyuPinyinString(String chinese, boolean isfull, boolean toUpperCase) {
- String result = null;
- if (null == chinese || chinese.equals(EmptyChar)) {
- return result;
- }
- char[] charArray = chinese.toCharArray();
- StringBuffer sb = new StringBuffer();
- //先判断,再循环转换
- if (isfull) {
- for (char ch : charArray) {
- // 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
- String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
- if (null != stringArray && stringArray.length > 0) {
- // 把第几声这个数字给去掉
- sb.append(stringArray[0].replaceAll(PinYinChar, EmptyChar));
- }
- }
- } else {
- for (char ch : charArray) {
- // 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
- String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
- if (null != stringArray && stringArray.length > 0) {
- // 取首字母
- sb.append(stringArray[0].charAt(0));
- }
- }
- }
- if (sb.length() > 0) {
- result = sb.toString();
- if (toUpperCase) {
- result = result.toUpperCase();
- }
- }
- return result;
- }
- private PinYinUtils(){}
- }
|