PinYin4JUtils

  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 }
原文地址:https://www.cnblogs.com/zlw-xf/p/7995187.html