1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package cn.chnmuseum.party.common.util;
import net.duguying.pinyin.Pinyin;
import net.duguying.pinyin.PinyinException;
import net.sourceforge.pinyin4j.PinyinHelper;
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.RegExUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
/**
* 获取中文拼音工具类
*
* @author jiawei
*/
public class PinYinUtil {
/**
* 获取中文对应的拼音
*
* @param chinese 中文
* @param firstWord 是否只取首字母
* @param appendNonChinese 中文之间出现字母是是否加入返回的拼音串
* @return 中文对应的拼音
*/
public static String getPinYin(String chinese, Boolean firstWord, Boolean appendNonChinese) {
/* 6月1日修改前
//汉语拼音输出格式
HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat();
//大小写设置 大写
pinyinOutputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
//音标设置 无音标
pinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
//特殊音标ü设置 用V表示
pinyinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
char[] charArray = chinese.trim().toCharArray();
StringBuilder stringBuilder = new StringBuilder();
for (char c : charArray) {
//匹配如果是汉字
if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
String[] pinyinStringArray;
try {
pinyinStringArray = PinyinHelper.toHanyuPinyinStringArray(c, pinyinOutputFormat);
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
return null;
}
if (firstWord != null && Boolean.TRUE.equals(firstWord)) {
//取拼音首字母
stringBuilder.append(pinyinStringArray[0].charAt(0));
} else {
//取全拼音
stringBuilder.append(pinyinStringArray[0]);
}
} else {
//出现不是中文时,拼接到拼音
if (appendNonChinese != null && Boolean.TRUE.equals(appendNonChinese)) {
stringBuilder.append(c);
}
}
}
return stringBuilder.toString();*/
// 6月1日修改后
String pinyinString = new String();
try {
// 是否需要将英文字符和拼音拼接
if (appendNonChinese) {
chinese = RegExUtils.replaceAll(chinese, "[a-zA-Z]", "");
}
Pinyin pinyin = new Pinyin();
if (firstWord) {
// 拼音首字母
pinyinString = pinyin.translateFirstChar(chinese);
}else {
// 拼音全拼
String withSepNoMark = pinyin.translateWithSepNoMark(chinese,"");
// 将字符串中的'ü'替换为'v’
pinyinString = withSepNoMark.replace("ü", "v");
pinyinString = pinyinString.replace(",", "");
}
} catch (PinyinException e) {
e.printStackTrace();
}
// 转为大写
return pinyinString.toUpperCase();
}
}