Browse Source

拼音转化方法修改

gaodm 3 years ago
parent
commit
9f545e6805
2 changed files with 56 additions and 25 deletions
  1. 10 3
      common/pom.xml
  2. 46 22
      common/src/main/java/com/diagbot/util/Cn2SpellUtil.java

+ 10 - 3
common/pom.xml

@@ -107,10 +107,17 @@
             <scope>compile</scope>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>com.belerweb</groupId>-->
+<!--            <artifactId>pinyin4j</artifactId>-->
+<!--            <version>2.5.1</version>-->
+<!--            <scope>compile</scope>-->
+<!--        </dependency>-->
+
         <dependency>
-            <groupId>com.belerweb</groupId>
-            <artifactId>pinyin4j</artifactId>
-            <version>2.5.1</version>
+            <groupId>com.github.promeg</groupId>
+            <artifactId>tinypinyin</artifactId>
+            <version>2.0.3</version>
             <scope>compile</scope>
         </dependency>
 

+ 46 - 22
common/src/main/java/com/diagbot/util/Cn2SpellUtil.java

@@ -1,9 +1,10 @@
 package com.diagbot.util;
 
-import net.sourceforge.pinyin4j.PinyinHelper;
-import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
-import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
-import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import com.github.promeg.pinyinhelper.Pinyin;
+import com.github.promeg.pinyinhelper.PinyinMapDict;
+
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @Description: 汉字转拼音
@@ -12,6 +13,23 @@ import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  */
 public class Cn2SpellUtil {
 
+    private Cn2SpellUtil() {
+
+    }
+
+    public static void init() {
+        Pinyin.init(Pinyin.newConfig()
+                .with(new PinyinMapDict() {
+                    @Override
+                    public Map<String, String[]> mapping() {
+                        HashMap<String, String[]> map = new HashMap<String, String[]>();
+                        map.put("", new String[] { "HE" });
+                        map.put("", new String[] { "MU" });
+                        return map;
+                    }
+                }));
+    }
+
     /**
      * 汉字转换位汉语拼音首字母,英文字符不变
      *
@@ -19,18 +37,16 @@ public class Cn2SpellUtil {
      * @return 拼音
      */
     public static String converterToFirstSpell(String chines) {
+        init();
         String pinyinName = "";
         char[] nameChar = chines.toCharArray();
-        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
-        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
-        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
         for (int i = 0; i < nameChar.length; i++) {
             if (nameChar[i] > 128) {
                 try {
-                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat);
-                    if (null != pinyinArray && pinyinArray.length > 0 && StringUtil.isNotBlank(pinyinArray[0])) {
-                        pinyinName += pinyinArray[0].charAt(0);
-                    }else {
+                    String pinyinStr = Pinyin.toPinyin(String.valueOf(nameChar[i]), "");
+                    if (StringUtil.isNotBlank(pinyinStr)) {
+                        pinyinName += pinyinStr.charAt(0);
+                    } else {
                         pinyinName += nameChar[i];
                     }
                 } catch (Exception e) {
@@ -50,7 +66,7 @@ public class Cn2SpellUtil {
      * @return 拼音(大写)
      */
     public static String converterToSpell(String chines) {
-        return converterToSpellByCaseType(chines, HanyuPinyinCaseType.UPPERCASE);
+        return converterToSpellByCaseType(chines, 1);
     }
 
     /**
@@ -60,7 +76,7 @@ public class Cn2SpellUtil {
      * @return 拼音(小写)
      */
     public static String converterToSpellLow(String chines) {
-        return converterToSpellByCaseType(chines, HanyuPinyinCaseType.LOWERCASE);
+        return converterToSpellByCaseType(chines, 2);
     }
 
     /**
@@ -69,19 +85,21 @@ public class Cn2SpellUtil {
      * @param chines 汉字
      * @return 拼音
      */
-    private static String converterToSpellByCaseType(String chines, HanyuPinyinCaseType caseType) {
+    private static String converterToSpellByCaseType(String chines, Integer caseType) {
+        init();
         String pinyinName = "";
         char[] nameChar = chines.toCharArray();
-        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
-        defaultFormat.setCaseType(caseType);
-        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
         for (int i = 0; i < nameChar.length; i++) {
             if (nameChar[i] > 128) {
                 try {
-                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat);
-                    if (null != pinyinArray && pinyinArray.length > 0) {
-                        pinyinName += pinyinArray[0];
-                    }else {
+                    String pinyinStr = Pinyin.toPinyin(String.valueOf(nameChar[i]), "");
+                    if (StringUtil.isNotBlank(pinyinStr)) {
+                        if (caseType.equals(2)) {
+                            pinyinName += pinyinStr.toLowerCase();
+                        } else {
+                            pinyinName += pinyinStr;
+                        }
+                    } else {
                         pinyinName += nameChar[i];
                     }
                 } catch (Exception e) {
@@ -95,11 +113,17 @@ public class Cn2SpellUtil {
     }
 
     public static void main(String[] args) {
-        System.out.println(converterToFirstSpell("11β-羟化酶缺陷症#11-羟化酶缺陷"));
+        System.out.println("================首字母================");
         System.out.println(converterToFirstSpell("欢迎来到Java世界"));
+        System.out.println(converterToFirstSpell("11β-羟化酶缺陷症#11-羟化酶缺陷"));
+        System.out.println(converterToFirstSpell("-"));
+        System.out.println("================大写全拼================");
         System.out.println(converterToSpell("欢迎来到Java世界"));
         System.out.println(converterToSpell("11β-羟化酶缺陷症#11-羟化酶缺陷"));
+        System.out.println(converterToSpell("-"));
+        System.out.println("================小写全拼================");
         System.out.println(converterToSpellLow("欢迎来到Java世界"));
         System.out.println(converterToSpellLow("11β-羟化酶缺陷症#11-羟化酶缺陷"));
+        System.out.println(converterToSpellLow("-"));
     }
 }