拼音操作工具类
拼音操作工具類,提供字符串轉換成拼音數組、漢字轉換成拼音、取漢字的首字母等方法。
源碼如下:(點擊下載 -PinyinUtil.java、pinyin4j-2.5.0.jar)
1 import net.sourceforge.pinyin4j.PinyinHelper;
2 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
3 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
4 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
5 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
6
7 /**
8 * 拼音操作工具類
9 *
10 */
11 public class PinyinUtil {
12 /**
13 * 將字符串轉換成拼音數組
14 *
15 * @param src
16 * @return
17 */
18 public static String[] stringToPinyin(String src) {
19 return stringToPinyin(src, false, null);
20 }
21
22 /**
23 * 將字符串轉換成拼音數組
24 *
25 * @param src
26 * @return
27 */
28 public static String[] stringToPinyin(String src, String separator) {
29 return stringToPinyin(src, true, separator);
30 }
31
32 /**
33 * 將字符串轉換成拼音數組
34 *
35 * @param src
36 * @param isPolyphone
37 * 是否查出多音字的所有拼音
38 * @param separator
39 * 多音字拼音之間的分隔符
40 * @return
41 */
42 public static String[] stringToPinyin(String src, boolean isPolyphone,
43 String separator) {
44 // 判斷字符串是否為空
45 if ("".equals(src) || null == src) {
46 return null;
47 }
48 char[] srcChar = src.toCharArray();
49 int srcCount = srcChar.length;
50 String[] srcStr = new String[srcCount];
51
52 for (int i = 0; i < srcCount; i++) {
53 srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);
54 }
55 return srcStr;
56 }
57
58 /**
59 * 將單個字符轉換成拼音
60 *
61 * @param src
62 * @return
63 */
64 public static String charToPinyin(char src, boolean isPolyphone, String separator) {
65 // 創建漢語拼音處理類
66 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
67 // 輸出設置,大小寫,音標方式
68 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
69 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
70
71 StringBuffer tempPinying = new StringBuffer();
72
73 // 如果是中文
74 if (src > 128) {
75 try {
76 // 轉換得出結果
77 String[] strs = PinyinHelper.toHanyuPinyinStringArray(src, defaultFormat);
78
79 // 是否查出多音字,默認是查出多音字的第一個字符
80 if (isPolyphone && null != separator) {
81 for (int i = 0; i < strs.length; i++) {
82 tempPinying.append(strs[i]);
83 if (strs.length != (i + 1)) {
84 // 多音字之間用特殊符號間隔起來
85 tempPinying.append(separator);
86 }
87 }
88 } else {
89 tempPinying.append(strs[0]);
90 }
91
92 } catch (BadHanyuPinyinOutputFormatCombination e) {
93 e.printStackTrace();
94 }
95 } else {
96 tempPinying.append(src);
97 }
98
99 return tempPinying.toString();
100
101 }
102
103 public static String hanziToPinyin(String hanzi) {
104 return hanziToPinyin(hanzi, " ");
105 }
106
107 /**
108 * 將漢字轉換成拼音
109 *
110 * @param hanzi
111 * @param separator
112 * @return
113 */
114 @SuppressWarnings("deprecation")
115 public static String hanziToPinyin(String hanzi, String separator) {
116 // 創建漢語拼音處理類
117 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
118 // 輸出設置,大小寫,音標方式
119 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
120 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
121
122 String pinyingStr = "";
123 try {
124 pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, separator);
125 } catch (BadHanyuPinyinOutputFormatCombination e) {
126 e.printStackTrace();
127 }
128 return pinyingStr;
129 }
130
131 /**
132 * 將字符串數組轉換成字符串
133 *
134 * @param str
135 * @param separator
136 * 各個字符串之間的分隔符
137 * @return
138 */
139 public static String stringArrayToString(String[] str, String separator) {
140 StringBuffer sb = new StringBuffer();
141 for (int i = 0; i < str.length; i++) {
142 sb.append(str[i]);
143 if (str.length != (i + 1)) {
144 sb.append(separator);
145 }
146 }
147 return sb.toString();
148 }
149
150 /**
151 * 簡單的將各個字符數組之間連接起來
152 *
153 * @param str
154 * @return
155 */
156 public static String stringArrayToString(String[] str) {
157 return stringArrayToString(str, "");
158 }
159
160 /**
161 * 將字符數組轉換成字符串
162 *
163 * @param str
164 * @param separator
165 * 各個字符串之間的分隔符
166 * @return
167 */
168 public static String charArrayToString(char[] ch, String separator) {
169 StringBuffer sb = new StringBuffer();
170 for (int i = 0; i < ch.length; i++) {
171 sb.append(ch[i]);
172 if (ch.length != (i + 1)) {
173 sb.append(separator);
174 }
175 }
176 return sb.toString();
177 }
178
179 /**
180 * 將字符數組轉換成字符串
181 *
182 * @param str
183 * @return
184 */
185 public static String charArrayToString(char[] ch) {
186 return charArrayToString(ch, " ");
187 }
188
189 /**
190 * 取漢字的首字母
191 *
192 * @param src
193 * @param isCapital
194 * 是否是大寫
195 * @return
196 */
197 public static char[] getHeadByChar(char src, boolean isCapital) {
198 // 如果不是漢字直接返回
199 if (src <= 128) {
200 return new char[] { src };
201 }
202 // 獲取所有的拼音
203 String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);
204 // 過濾中文符號
205 if (pinyingStr == null) {
206 return new char[] { src };
207 }
208 // 創建返回對象
209 int polyphoneSize = pinyingStr.length;
210 char[] headChars = new char[polyphoneSize];
211 int i = 0;
212 // 截取首字符
213 for (String s : pinyingStr) {
214 char headChar = s.charAt(0);
215 // 首字母是否大寫,默認是小寫
216 if (isCapital) {
217 headChars[i] = Character.toUpperCase(headChar);
218 } else {
219 headChars[i] = headChar;
220 }
221 i++;
222 }
223
224 return headChars;
225 }
226
227 /**
228 * 取漢字的首字母(默認是大寫)
229 *
230 * @param src
231 * @return
232 */
233 public static char[] getHeadByChar(char src) {
234 return getHeadByChar(src, true);
235 }
236
237 /**
238 * 查找字符串首字母
239 *
240 * @param src
241 * @return
242 */
243 public static String[] getHeadByString(String src) {
244 return getHeadByString(src, true);
245 }
246
247 /**
248 * 查找字符串首字母
249 *
250 * @param src
251 * @param isCapital
252 * 是否大寫
253 * @return
254 */
255 public static String[] getHeadByString(String src, boolean isCapital) {
256 return getHeadByString(src, isCapital, null);
257 }
258
259 /**
260 * 查找字符串首字母
261 *
262 * @param src
263 * @param isCapital
264 * 是否大寫
265 * @param separator
266 * 分隔符
267 * @return
268 */
269 public static String[] getHeadByString(String src, boolean isCapital, String separator) {
270 char[] chars = src.toCharArray();
271 String[] headString = new String[chars.length];
272 int i = 0;
273 for (char ch : chars) {
274
275 char[] chs = getHeadByChar(ch, isCapital);
276 StringBuffer sb = new StringBuffer();
277 if (null != separator) {
278 int j = 1;
279
280 for (char ch1 : chs) {
281 sb.append(ch1);
282 if (j != chs.length) {
283 sb.append(separator);
284 }
285 j++;
286 }
287 } else {
288 sb.append(chs[0]);
289 }
290 headString[i] = sb.toString();
291 i++;
292 }
293 return headString;
294 }
295
296 public static String getPinyin(String hanzi) {
297 return stringArrayToString(stringToPinyin(hanzi));
298 }
299 }
總結
- 上一篇: CRC 详解
- 下一篇: 苹果AirPods Pro 2劲敌:索尼