拼音操作工具类 - PinyinUtil.java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拼音操作工具类 - PinyinUtil.java相关的知识,希望对你有一定的参考价值。

拼音操作工具类,提供字符串转换成拼音数组、汉字转换成拼音、取汉字的首字母等方法。

 

源码如下:(点击下载 -技术分享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 }

 

以上是关于拼音操作工具类 - PinyinUtil.java的主要内容,如果未能解决你的问题,请参考以下文章

个人常用工具类:汉字转拼音

java 中文转拼音工具类

汉语转拼音(全转与只转首个字母)工具类

java汉字转拼音工具类

汉字转拼音 java 工具类

JAVA中拼音工具类