1 import java.util.Arrays;
2
3 import net.sourceforge.pinyin4j.PinyinHelper;
4 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
5 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
6 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
7 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
8
9 public class PinYin4jUtils {
10 /**
11 * 将字符串转换成拼音数组
12 *
13 * @param src
14 * @return
15 */
16 public static String[] stringToPinyin(String src) {
17 return stringToPinyin(src, false, null);
18 }
19
20 /**
21 * 将字符串转换成拼音数组
22 *
23 * @param src
24 * @return
25 */
26 public static String[] stringToPinyin(String src, String separator) {
27
28 return stringToPinyin(src, true, separator);
29 }
30
31 /**
32 * 将字符串转换成拼音数组
33 *
34 * @param src
35 * @param isPolyphone
36 * 是否查出多音字的所有拼音
37 * @param separator
38 * 多音字拼音之间的分隔符
39 * @return
40 */
41 public static String[] stringToPinyin(String src, boolean isPolyphone,
42 String separator) {
43 // 判断字符串是否为空
44 if ("".equals(src) || null == src) {
45 return null;
46 }
47 char[] srcChar = src.toCharArray();
48 int srcCount = srcChar.length;
49 String[] srcStr = new String[srcCount];
50
51 for (int i = 0; i < srcCount; i++) {
52 srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);
53 }
54 return srcStr;
55 }
56
57 /**
58 * 将单个字符转换成拼音
59 *
60 * @param src
61 * @return
62 */
63 public static String charToPinyin(char src, boolean isPolyphone,
64 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,
78 defaultFormat);
79
80 // 是否查出多音字,默认是查出多音字的第一个字符
81 if (isPolyphone && null != separator) {
82 for (int i = 0; i < strs.length; i++) {
83 tempPinying.append(strs[i]);
84 if (strs.length != (i + 1)) {
85 // 多音字之间用特殊符号间隔起来
86 tempPinying.append(separator);
87 }
88 }
89 } else {
90 tempPinying.append(strs[0]);
91 }
92
93 } catch (BadHanyuPinyinOutputFormatCombination e) {
94 e.printStackTrace();
95 }
96 } else {
97 tempPinying.append(src);
98 }
99
100 return tempPinying.toString();
101
102 }
103
104 public static String hanziToPinyin(String hanzi) {
105 return hanziToPinyin(hanzi, " ");
106 }
107
108 /**
109 * 将汉字转换成拼音
110 *
111 * @param hanzi
112 * @param separator
113 * @return
114 */
115 public static String hanziToPinyin(String hanzi, String separator) {
116
117 // 创建汉语拼音处理类
118 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
119 // 输出设置,大小写,音标方式
120 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
121 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
122
123 String pinyingStr = "";
124 try {
125 pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat,
126 separator);
127 } catch (BadHanyuPinyinOutputFormatCombination e) {
128 // TODO Auto-generated catch block
129 e.printStackTrace();
130 }
131 return pinyingStr;
132 }
133
134 /**
135 * 将字符串数组转换成字符串
136 *
137 * @param str
138 * @param separator
139 * 各个字符串之间的分隔符
140 * @return
141 */
142 public static String stringArrayToString(String[] str, String separator) {
143 StringBuffer sb = new StringBuffer();
144 for (int i = 0; i < str.length; i++) {
145 sb.append(str[i]);
146 if (str.length != (i + 1)) {
147 sb.append(separator);
148 }
149 }
150 return sb.toString();
151 }
152
153 /**
154 * 简单的将各个字符数组之间连接起来
155 *
156 * @param str
157 * @return
158 */
159 public static String stringArrayToString(String[] str) {
160 return stringArrayToString(str, "");
161 }
162
163 /**
164 * 将字符数组转换成字符串
165 *
166 * @param str
167 * @param separator
168 * 各个字符串之间的分隔符
169 * @return
170 */
171 public static String charArrayToString(char[] ch, String separator) {
172 StringBuffer sb = new StringBuffer();
173 for (int i = 0; i < ch.length; i++) {
174 sb.append(ch[i]);
175 if (ch.length != (i + 1)) {
176 sb.append(separator);
177 }
178 }
179 return sb.toString();
180 }
181
182 /**
183 * 将字符数组转换成字符串
184 *
185 * @param str
186 * @return
187 */
188 public static String charArrayToString(char[] ch) {
189 return charArrayToString(ch, " ");
190 }
191
192 /**
193 * 取汉字的首字母
194 *
195 * @param src
196 * @param isCapital
197 * 是否是大写
198 * @return
199 */
200 public static char[] getHeadByChar(char src, boolean isCapital) {
201 // 如果不是汉字直接返回
202 if (src <= 128) {
203 return new char[] { src };
204 }
205 // 获取所有的拼音
206 String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(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,
270 String separator) {
271 char[] chars = src.toCharArray();
272 String[] headString = new String[chars.length];
273 int i = 0;
274 for (char ch : chars) {
275
276 char[] chs = getHeadByChar(ch, isCapital);
277 StringBuffer sb = new StringBuffer();
278 if (null != separator) {
279 int j = 1;
280
281 for (char ch1 : chs) {
282 sb.append(ch1);
283 if (j != chs.length) {
284 sb.append(separator);
285 }
286 j++;
287 }
288 } else {
289 sb.append(chs[0]);
290 }
291 headString[i] = sb.toString();
292 i++;
293 }
294 return headString;
295 }
296
297 public static void main(String[] args) {
298 // pin4j 简码 和 城市编码
299 String s1 = "中华人民共和国";
300 String[] headArray = getHeadByString(s1); // 获得每个汉字拼音首字母
301 System.out.println(Arrays.toString(headArray));
302
303 String s2 ="长城" ;
304 System.out.println(Arrays.toString(stringToPinyin(s2,true,",")));
305
306 String s3 ="长";
307 System.out.println(Arrays.toString(stringToPinyin(s3,true,",")));
308 }
309 }