PinYinUtils.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package cn.com.ty.lift.common.utils;
  2. import net.sourceforge.pinyin4j.PinyinHelper;
  3. /**
  4. * <p>
  5. * 汉字转换拼音工具类
  6. * </p>
  7. *
  8. * @author wcz
  9. * @since 2018/5/9
  10. */
  11. public class PinYinUtils {
  12. /**
  13. * 拼音中的声调字符
  14. */
  15. private static final String PinYinChar = "\\d";
  16. /**
  17. * 空字符串""
  18. */
  19. private static final String EmptyChar = "";
  20. /**
  21. * 获取汉字首字母的方法。如: 张三 --> zs
  22. * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
  23. *
  24. * @param chinese 汉字字符串
  25. * @return 大写汉子首字母; 如果都转换失败,那么返回null
  26. */
  27. public static String toFirstChar(String chinese) {
  28. return toHanyuPinyinString(chinese,false,false);
  29. }
  30. /**
  31. * 获取汉字首字母的方法。如: 张三 --> ZS
  32. * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
  33. *
  34. * @param chinese 汉字字符串
  35. * @return 大写汉子首字母; 如果都转换失败,那么返回null
  36. */
  37. public static String toFirstCharUpper(String chinese){
  38. return toHanyuPinyinString(chinese,false,true);
  39. }
  40. /**
  41. * 获取汉字拼音的方法。如: 张三 --> zhangsan
  42. * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
  43. *
  44. * @param chinese 汉字字符串
  45. * @return 汉字拼音; 如果都转换失败,那么返回null
  46. */
  47. public static String toPinYin(String chinese) {
  48. return toHanyuPinyinString(chinese,true,false);
  49. }
  50. /**
  51. * 获取汉字拼音的方法。如: 张三 --> ZHANGSAN
  52. * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
  53. *
  54. * @param chinese 汉字字符串
  55. * @return 汉字拼音; 如果都转换失败,那么返回null
  56. */
  57. public static String toPinYinUpper(String chinese) {
  58. return toHanyuPinyinString(chinese,true,true);
  59. }
  60. /**
  61. * <p>
  62. * 获取汉字拼音的方法。如: 张三 --> zhangsan/ZHANGSAN/zs/ZS
  63. * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
  64. * </p>
  65. * @param chinese 汉字字符串
  66. * @param isfull true: 全拼, false: 首字母
  67. * @param toUpperCase true: 大写, false: 小写
  68. * @return String 拼音字符串
  69. */
  70. private static String toHanyuPinyinString(String chinese, boolean isfull, boolean toUpperCase) {
  71. String result = null;
  72. if (null == chinese || chinese.equals(EmptyChar)) {
  73. return result;
  74. }
  75. char[] charArray = chinese.toCharArray();
  76. StringBuffer sb = new StringBuffer();
  77. //先判断,再循环转换
  78. if (isfull) {
  79. for (char ch : charArray) {
  80. // 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
  81. String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
  82. if (null != stringArray && stringArray.length > 0) {
  83. // 把第几声这个数字给去掉
  84. sb.append(stringArray[0].replaceAll(PinYinChar, EmptyChar));
  85. }
  86. }
  87. } else {
  88. for (char ch : charArray) {
  89. // 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
  90. String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
  91. if (null != stringArray && stringArray.length > 0) {
  92. // 取首字母
  93. sb.append(stringArray[0].charAt(0));
  94. }
  95. }
  96. }
  97. if (sb.length() > 0) {
  98. result = sb.toString();
  99. if (toUpperCase) {
  100. result = result.toUpperCase();
  101. }
  102. }
  103. return result;
  104. }
  105. private PinYinUtils(){}
  106. }