|
@ -5,12 +5,21 @@ import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
|
|
|
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
|
|
|
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
|
|
|
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
|
|
|
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.util.Assert;
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* @author huangwenjie
|
|
|
* @date 2020/3/13 09:32
|
|
|
*/
|
|
|
public class PinYinUtils {
|
|
|
|
|
|
public static final Map<String, String> multiToneMap = new HashMap<>();
|
|
|
|
|
|
//将中文转换为英文
|
|
|
public static String getEname(String name) throws Exception
|
|
|
{
|
|
@ -55,6 +64,66 @@ public class PinYinUtils {
|
|
|
|
|
|
return newstr.toString();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取汉字串拼音首字母,英文字符不变
|
|
|
*
|
|
|
* @param chinese 汉字串
|
|
|
* @return 汉语拼音首字母
|
|
|
*/
|
|
|
public static String getFirstSpell(String chinese) {
|
|
|
StringBuffer pybf = new StringBuffer();
|
|
|
char[] arr = chinese.toCharArray();
|
|
|
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
|
|
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
|
|
|
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
|
|
//只取第一个汉字的拼音
|
|
|
if (arr[0] > 128) {
|
|
|
try {
|
|
|
String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[0], defaultFormat);
|
|
|
// 长度大于1,表明是多音字,往后多取一个字或两个字,取词组,取匹配多音字属性文件确定最终读音
|
|
|
if (temp != null && temp.length > 1 && !temp[0].equalsIgnoreCase(temp[1])) {
|
|
|
String finalLetter = chinese;
|
|
|
if(StringUtils.isEmpty(finalLetter)){
|
|
|
System.out.print(arr[0]);
|
|
|
System.out.print(arr[1]+":[");
|
|
|
for(int i=0; i< temp.length-1; i++)
|
|
|
System.out.print(temp[i]+", ");
|
|
|
System.out.println(temp[temp.length-1]+"]");
|
|
|
pybf.append(temp[0].charAt(0));
|
|
|
}else{
|
|
|
pybf.append(finalLetter.charAt(0));
|
|
|
}
|
|
|
} else {
|
|
|
pybf.append(temp[0].charAt(0));
|
|
|
}
|
|
|
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
} else {
|
|
|
pybf.append(arr[0]);
|
|
|
}
|
|
|
return pybf.toString().replaceAll("\\W", "").trim();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取医院多音字的读音,取词组,最多取三个
|
|
|
*
|
|
|
* @param chinesePhrase 中文词组
|
|
|
* @return
|
|
|
*/
|
|
|
public static String getOrgNameMultiTone(String chinesePhrase) {
|
|
|
Assert.notNull(chinesePhrase, "中文词组不可为空");
|
|
|
if (multiToneMap.containsKey(chinesePhrase.substring(0, 1))) {
|
|
|
return multiToneMap.get(chinesePhrase.substring(0, 1));
|
|
|
} else if (multiToneMap.containsKey(chinesePhrase.substring(0, 2))) {
|
|
|
return multiToneMap.get(chinesePhrase.substring(0, 2));
|
|
|
} else if (multiToneMap.containsKey(chinesePhrase.substring(0, 3))) {
|
|
|
return multiToneMap.get(chinesePhrase.substring(0, 3));
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
public static void main(String[] args) throws Exception{
|
|
|
System.out.println(getUpEname("李宇春"));
|
|
|
|