|
@@ -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("-"));
|
|
|
}
|
|
|
}
|