<!-- 导入pinyin4j -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
PinYin4jUtils 工具类
1 package cn.itcast.bos.utils;
2
3 import java.util.Arrays;
4
5 import net.sourceforge.pinyin4j.PinyinHelper;
6 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
7 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
8 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
9 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
10
11 public class PinYin4jUtils {
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
30 return stringToPinyin(src, true, separator);
31 }
32
33 /**
34 * 将字符串转换成拼音数组
35 *
36 * @param src
37 * @param isPolyphone
38 * 是否查出多音字的所有拼音
39 * @param separator
40 * 多音字拼音之间的分隔符
41 * @return
42 */
43 public static String[] stringToPinyin(String src, boolean isPolyphone,
44 String separator) {
45 // 判断字符串是否为空
46 if ("".equals(src) || null == src) {
47 return null;
48 }
49 char[] srcChar = src.toCharArray();
50 int srcCount = srcChar.length;
51 String[] srcStr = new String[srcCount];
52
53 for (int i = 0; i < srcCount; i++) {
54 srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);
55 }
56 return srcStr;
57 }
58
59 /**
60 * 将单个字符转换成拼音
61 *
62 * @param src
63 * @return
64 */
65 public static String charToPinyin(char src, boolean isPolyphone,
66 String separator) {
67 // 创建汉语拼音处理类
68 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
69 // 输出设置,大小写,音标方式
70 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
71 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
72
73 StringBuffer tempPinying = new StringBuffer();
74
75 // 如果是中文
76 if (src > 128) {
77 try {
78 // 转换得出结果
79 String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,
80 defaultFormat);
81
82 // 是否查出多音字,默认是查出多音字的第一个字符
83 if (isPolyphone && null != separator) {
84 for (int i = 0; i < strs.length; i++) {
85 tempPinying.append(strs[i]);
86 if (strs.length != (i + 1)) {
87 // 多音字之间用特殊符号间隔起来
88 tempPinying.append(separator);
89 }
90 }
91 } else {
92 tempPinying.append(strs[0]);
93 }
94
95 } catch (BadHanyuPinyinOutputFormatCombination e) {
96 e.printStackTrace();
97 }
98 } else {
99 tempPinying.append(src);
100 }
101
102 return tempPinying.toString();
103
104 }
105
106 public static String hanziToPinyin(String hanzi) {
107 return hanziToPinyin(hanzi, " ");
108 }
109
110 /**
111 * 将汉字转换成拼音
112 *
113 * @param hanzi
114 * @param separator
115 * @return
116 */
117 public static String hanziToPinyin(String hanzi, String separator) {
118
119 // 创建汉语拼音处理类
120 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
121 // 输出设置,大小写,音标方式
122 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
123 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
124
125 String pinyingStr = "";
126 try {
127 pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat,
128 separator);
129 } catch (BadHanyuPinyinOutputFormatCombination e) {
130 // TODO Auto-generated catch block
131 e.printStackTrace();
132 }
133 return pinyingStr;
134 }
135
136 /**
137 * 将字符串数组转换成字符串
138 *
139 * @param str
140 * @param separator
141 * 各个字符串之间的分隔符
142 * @return
143 */
144 public static String stringArrayToString(String[] str, String separator) {
145 StringBuffer sb = new StringBuffer();
146 for (int i = 0; i < str.length; i++) {
147 sb.append(str[i]);
148 if (str.length != (i + 1)) {
149 sb.append(separator);
150 }
151 }
152 return sb.toString();
153 }
154
155 /**
156 * 简单的将各个字符数组之间连接起来
157 *
158 * @param str
159 * @return
160 */
161 public static String stringArrayToString(String[] str) {
162 return stringArrayToString(str, "");
163 }
164
165 /**
166 * 将字符数组转换成字符串
167 *
168 * @param str
169 * @param separator
170 * 各个字符串之间的分隔符
171 * @return
172 */
173 public static String charArrayToString(char[] ch, String separator) {
174 StringBuffer sb = new StringBuffer();
175 for (int i = 0; i < ch.length; i++) {
176 sb.append(ch[i]);
177 if (ch.length != (i + 1)) {
178 sb.append(separator);
179 }
180 }
181 return sb.toString();
182 }
183
184 /**
185 * 将字符数组转换成字符串
186 *
187 * @param str
188 * @return
189 */
190 public static String charArrayToString(char[] ch) {
191 return charArrayToString(ch, " ");
192 }
193
194 /**
195 * 取汉字的首字母
196 *
197 * @param src
198 * @param isCapital
199 * 是否是大写
200 * @return
201 */
202 public static char[] getHeadByChar(char src, boolean isCapital) {
203 // 如果不是汉字直接返回
204 if (src <= 128) {
205 return new char[] { src };
206 }
207 // 获取所有的拼音
208 String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);
209
210 // 创建返回对象
211 int polyphoneSize = pinyingStr.length;
212 char[] headChars = new char[polyphoneSize];
213 int i = 0;
214 // 截取首字符
215 for (String s : pinyingStr) {
216 char headChar = s.charAt(0);
217 // 首字母是否大写,默认是小写
218 if (isCapital) {
219 headChars[i] = Character.toUpperCase(headChar);
220 } else {
221 headChars[i] = headChar;
222 }
223 i++;
224 }
225
226 return headChars;
227 }
228
229 /**
230 * 取汉字的首字母(默认是大写)
231 *
232 * @param src
233 * @return
234 */
235 public static char[] getHeadByChar(char src) {
236 return getHeadByChar(src, true);
237 }
238
239 /**
240 * 查找字符串首字母
241 *
242 * @param src
243 * @return
244 */
245 public static String[] getHeadByString(String src) {
246 return getHeadByString(src, true);
247 }
248
249 /**
250 * 查找字符串首字母
251 *
252 * @param src
253 * @param isCapital
254 * 是否大写
255 * @return
256 */
257 public static String[] getHeadByString(String src, boolean isCapital) {
258 return getHeadByString(src, isCapital, null);
259 }
260
261 /**
262 * 查找字符串首字母
263 *
264 * @param src
265 * @param isCapital
266 * 是否大写
267 * @param separator
268 * 分隔符
269 * @return
270 */
271 public static String[] getHeadByString(String src, boolean isCapital,
272 String separator) {
273 char[] chars = src.toCharArray();
274 String[] headString = new String[chars.length];
275 int i = 0;
276 for (char ch : chars) {
277
278 char[] chs = getHeadByChar(ch, isCapital);
279 StringBuffer sb = new StringBuffer();
280 if (null != separator) {
281 int j = 1;
282
283 for (char ch1 : chs) {
284 sb.append(ch1);
285 if (j != chs.length) {
286 sb.append(separator);
287 }
288 j++;
289 }
290 } else {
291 sb.append(chs[0]);
292 }
293 headString[i] = sb.toString();
294 i++;
295 }
296 return headString;
297 }
298
299 public static void main(String[] args) {
300 // pin4j 简码 和 城市编码
301 String s1 = "中华人民共和国";
302 String[] headArray = getHeadByString(s1); // 获得每个汉字拼音首字母
303 System.out.println(Arrays.toString(headArray));
304
305 String s2 = "长城";
306 System.out.println(Arrays.toString(stringToPinyin(s2, true, ",")));
307
308 }
309 }