拼音操作工具类 - PinyinUtil.java

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

源码如下:(点击下载 -PinyinUtil.javapinyin4j-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 }
时间: 2024-10-10 23:28:18

拼音操作工具类 - PinyinUtil.java的相关文章

目录操作工具类 CopyDir.java

package com.util; import java.io.*; /** * 1,建立目的目录. 2,遍历源目录. 3,遍历过程中,创建文件或者文件夹. 原理:其实就是改变了源文件或者目录的目录头. * @datetime  Dsc  24 */ public class CopyDir { private File sDir, dDir, newDir; public CopyDir(String s, String d) { this(new File(s), new File(d))

FileUtils.java 本地 文件操作工具类

package Http; import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException; /** * * 本地文件操作工具类 *保存文本 *保存图片 * Created by lxj-pc on 2017/6/27. */public class FileUtils { public static void saveText(String cont

Java IO(文件操作工具类)

FileOperate实现的功能: 1. 返回文件夹中所有文件列表 2. 读取文本文件内容 3. 新建目录 4. 新建多级目录 5. 新建文件 6. 有编码方式的创建文件 7. 删除文件 8. 删除指定文件夹下所有文件 9. 复制单个文件 10. 复制整个文件夹的内容 11. 移动文件 12. 移动目录 13. 建立一个可以追加的bufferedwriter 14. 得到一个bufferedreader Java代码    package utils; import java.io.Buffer

java数组操作工具类

package com.zuidaima.util.common; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; /** * 数组操作辅助类,支持int,char,boject,String类型 *@author www.zuidaima.com */ public class ArrayHelp

java实现简单文件操作工具类

本篇带来关于文件操作的简单工具类,包括文件夹创建,文件夹删除,文件创建,文件重命名,文件复制,文件删除.如果需要文件夹复制,其实就是创建文件夹和复制文件的操作.下面直接上代码 package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.Fil

java下的多线程操作工具类(原创)

因为毕业设计上需要将控制台的任务实时输出到界面上, 而且那是个Hadoop的mapreduce任务,一跑半个小时的节奏,所以需要用到多线程并随时读取返回的数据, 百度了没找到合适的方法,于是被逼无奈编写了这个十分简单的多线程操作工具类. 大概的功能就是可以执行一个特定的线程(线程必须调用本类的方法才能实现实时输出信息的功能),然后随时调用readResult方法就可以获取到结果集. 在毕业设计的应用上,就是创建一个工具类,然后让它自己去跑,根据taskId保存到session中,用ajax循环读

java属性文件properties常用操作工具类

对于java.util.Properties类,通常我们只需要做到以下3个学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 3.掌握相对路径,能正确书写一个properties文件的相对路径. 而在平时的工作中,会遇到各种各样的需求,以下是一个封装. package com.herman.util; import java.io.File; import java.

JAVA FileUtils(文件读写以及操作工具类)

转别人的合并的链接 //https://www.cnblogs.com/chenhuan001/p/6575053.html //https://blog.csdn.net/lovoo/article/details/77899627 第一个链接找不到了作者看见了说一下我给你上链接(但是你的名字信息没改哈!!) package com; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import

Code片段 : .properties属性文件操作工具类 &amp; JSON工具类

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 java.util.Properties 是一个属性集合.常见的api有如下: load(InputStream inStream)  从输入流中读取属性 getProperty(String key)  根据key,获取属性值 getOrDefault(Object key, V defaultValue)