|
@@ -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,25 @@ 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[] { "HE" });
|
|
|
+ map.put("", new String[] { "MU" });
|
|
|
+ map.put("𧿹", new String[] { "MU" });
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 汉字转换位汉语拼音首字母,英文字符不变
|
|
|
*
|
|
@@ -19,21 +39,17 @@ 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 {
|
|
|
- pinyinName +=
|
|
|
- PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
+ String pinyinRes = Pinyin.toPinyin(chines, "*××*");
|
|
|
+ if (StringUtil.isNotBlank(pinyinRes)){
|
|
|
+ String[] nameChar = pinyinRes.split("\\*××\\*");
|
|
|
+ for (int i = 0; i < nameChar.length; i++) {
|
|
|
+ if (StringUtil.isNotBlank(nameChar[i])) {
|
|
|
+ pinyinName += nameChar[i].charAt(0);
|
|
|
+ } else {
|
|
|
+ pinyinName += nameChar[i];
|
|
|
}
|
|
|
- } else {
|
|
|
- pinyinName += nameChar[i];
|
|
|
}
|
|
|
}
|
|
|
return pinyinName;
|
|
@@ -46,7 +62,7 @@ public class Cn2SpellUtil {
|
|
|
* @return 拼音(大写)
|
|
|
*/
|
|
|
public static String converterToSpell(String chines) {
|
|
|
- return converterToSpellByCaseType(chines, HanyuPinyinCaseType.UPPERCASE);
|
|
|
+ return converterToSpellByCaseType(chines, 1);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -56,7 +72,7 @@ public class Cn2SpellUtil {
|
|
|
* @return 拼音(小写)
|
|
|
*/
|
|
|
public static String converterToSpellLow(String chines) {
|
|
|
- return converterToSpellByCaseType(chines, HanyuPinyinCaseType.LOWERCASE);
|
|
|
+ return converterToSpellByCaseType(chines, 2);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -65,29 +81,32 @@ 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 {
|
|
|
- pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0];
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- } else {
|
|
|
- pinyinName += nameChar[i];
|
|
|
- }
|
|
|
+ if (caseType.equals(2)) {
|
|
|
+ pinyinName = Pinyin.toPinyin(chines, "").toLowerCase();
|
|
|
+ } else {
|
|
|
+ pinyinName = Pinyin.toPinyin(chines, "");
|
|
|
}
|
|
|
return pinyinName;
|
|
|
}
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
+ System.out.println("================首字母================");
|
|
|
System.out.println(converterToFirstSpell("欢迎来到Java世界"));
|
|
|
+ System.out.println(converterToFirstSpell("11β-羟化酶缺陷症#11-羟化酶缺陷"));
|
|
|
+ System.out.println(converterToFirstSpell("-"));
|
|
|
+ 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(converterToSpell("𬌗-𧿹"));
|
|
|
+ System.out.println("================小写全拼================");
|
|
|
System.out.println(converterToSpellLow("欢迎来到Java世界"));
|
|
|
+ System.out.println(converterToSpellLow("11β-羟化酶缺陷症#11-羟化酶缺陷"));
|
|
|
+ System.out.println(converterToSpellLow("-"));
|
|
|
+ System.out.println(converterToSpellLow("𬌗-𧿹"));
|
|
|
}
|
|
|
}
|