来源于jeecg开源项目,里面有很多值得学习的地方,
博客地址:http://blog.csdn.net/blogdevteam/article/details/8534797
pinyin4j汉字以及pinyin之间转换,以及常用的一些操作,像去pinyin中的首字母以及大小写
import java.util.HashSet; import java.util.Set; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; /** * java汉字转拼音操作工具类 */ public class PinyinUtil { /** * 将字符串转换成拼音数组 * @param src * @return */ public static String[] stringToPinyin(String src) { return stringToPinyin(src, false, null); } /** * 将字符串转换成拼音数组 * @param src * @return */ public static String[] stringToPinyin(String src, String separator) { return stringToPinyin(src, true, separator); } /** * 将字符串转换成拼音数组 * @param src * @param isPolyphone * 是否查出多音字的所有拼音 * @param separator * 多音字拼音之间的分隔符 * @return */ public static String[] stringToPinyin(String src, boolean isPolyphone, String separator) { // 判断字符串是否为空 if ("".equals(src) || null == src) { return null; } char[] srcChar = src.toCharArray(); int srcCount = srcChar.length; String[] srcStr = new String[srcCount]; for (int i = 0; i < srcCount; i++) { srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator); } return srcStr; } /** * 将单个字符转换成拼音 * @param src * @return */ public static String charToPinyin(char src, boolean isPolyphone,String separator) { // 创建汉语拼音处理类 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 输出设置,大小写,音标方式 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); StringBuffer tempPinying = new StringBuffer(); // 如果是中文 if (src > 128) { try { // 转换得出结果 String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,defaultFormat); // 是否查出多音字,默认是查出多音字的第一个字符 if (isPolyphone && null != separator) { for (int i = 0; i < strs.length; i++) { tempPinying.append(strs[i]); if (strs.length != (i + 1)) { // 多音字之间用特殊符号间隔起来 tempPinying.append(separator); } } } else { tempPinying.append(strs[0]); } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { tempPinying.append(src); } return tempPinying.toString(); } public static String hanziToPinyin(String hanzi) { return hanziToPinyin(hanzi, " "); } /** * 将汉字转换成拼音 * @param hanzi * @param separator * @return */ @SuppressWarnings("deprecation") public static String hanziToPinyin(String hanzi, String separator) { // 创建汉语拼音处理类 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 输出设置,大小写,音标方式 defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); String pinyingStr = ""; try { pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat,separator); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return pinyingStr; } /** * 将字符串数组转换成字符串 * @param str * @param separator * 各个字符串之间的分隔符 * @return */ public static String stringArrayToString(String[] str, String separator) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < str.length; i++) { sb.append(str[i]); if (str.length != (i + 1)) { sb.append(separator); } } return sb.toString(); } /** * 简单的将各个字符数组之间连接起来 * @param str * @return */ public static String stringArrayToString(String[] str) { return stringArrayToString(str, ""); } /** * 将字符数组转换成字符串 * @param str * @param separator * 各个字符串之间的分隔符 * @return */ public static String charArrayToString(char[] ch, String separator) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < ch.length; i++) { sb.append(ch[i]); if (ch.length != (i + 1)) { sb.append(separator); } } return sb.toString(); } /** * 将字符数组转换成字符串 * @param str * @return */ public static String charArrayToString(char[] ch) { return charArrayToString(ch, " "); } /** * 取汉字的首字母 * @param src * @param isCapital * 是否是大写 * @return */ public static char[] getHeadByChar(char src, boolean isCapital) { // 如果不是汉字直接返回 if (src <= 128) { return new char[] { src }; } // 获取所有的拼音 String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src); // 创建返回对象 int polyphoneSize = pinyingStr.length; char[] headChars = new char[polyphoneSize]; int i = 0; // 截取首字符 for (String s : pinyingStr) { char headChar = s.charAt(0); // 首字母是否大写,默认是小写 if (isCapital) { headChars[i] = Character.toUpperCase(headChar); } else { headChars[i] = headChar; } i++; } return headChars; } /** * 取汉字的首字母(默认是大写) * @param src * @return */ public static char[] getHeadByChar(char src) { return getHeadByChar(src, true); } /** * 查找字符串首字母 * @param src * @return */ public static String[] getHeadByString(String src) { return getHeadByString(src, true); } /** * 查找字符串首字母 * @param src * @param isCapital * 是否大写 * @return */ public static String[] getHeadByString(String src, boolean isCapital) { return getHeadByString(src, isCapital, null); } /** * 查找字符串首字母 * @param src * @param isCapital * 是否大写 * @param separator * 分隔符 * @return */ public static String[] getHeadByString(String src, boolean isCapital,String separator) { char[] chars = src.toCharArray(); String[] headString = new String[chars.length]; int i = 0; for (char ch : chars) { char[] chs = getHeadByChar(ch, isCapital); StringBuffer sb = new StringBuffer(); if (null != separator) { int j = 1; for (char ch1 : chs) { sb.append(ch1); if (j != chs.length) { sb.append(separator); } j++; } } else { sb.append(chs[0]); } headString[i] = sb.toString(); i++; } return headString; } /** * 将汉字转换为全拼 * @param src * @return String */ public static String getPinYin(String src) { char[] t1 = null; t1 = src.toCharArray(); String[] t2 = new String[t1.length]; // 设置汉字拼音输出的格式 HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat(); t3.setCaseType(HanyuPinyinCaseType.LOWERCASE); t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE); t3.setVCharType(HanyuPinyinVCharType.WITH_V); String t4 = ""; int t0 = t1.length; try { for (int i = 0; i < t0; i++) { // 判断能否为汉字字符 if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) { t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中 t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后 } else { // 如果不是汉字字符,间接取出字符并连接到字符串t4后 t4 += Character.toString(t1[i]); } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return t4; } /** * 提取每个汉字的首字母 * @param str * @return String */ public static String getPinYinHeadChar(String str) { String convert = ""; for (int j = 0; j < str.length(); j++) { char word = str.charAt(j); // 提取汉字的首字母 String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word); if (pinyinArray != null) { convert += pinyinArray[0].charAt(0); } else { convert += word; } } return convert; } /** * 将字符串转换成ASCII码 * @param cnStr * @return String */ public static String getCnASCII(String cnStr) { StringBuffer strBuf = new StringBuffer(); // 将字符串转换成字节序列 byte[] bGBK = cnStr.getBytes(); for (int i = 0; i < bGBK.length; i++) { // org.jeecgframework.core.util.LogUtil.info(Integer.toHexString(bGBK[i] & 0xff)); // 将每个字符转换成ASCII码 strBuf.append(Integer.toHexString(bGBK[i] & 0xff)); } return strBuf.toString(); } /** * 汉字转换位汉语拼音首字母,英文字符不变 * @param chines * 汉字 * @return 拼音 */ public static String converterToFirstSpell(String chines) { String pinyinName = ""; char[] nameChar = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < nameChar.length; i++) { if (nameChar[i] > 128) { try { pinyinName += PinyinHelper.toHanyuPinyinStringArray( nameChar[i], defaultFormat)[0].charAt(0); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { pinyinName += nameChar[i]; } } return pinyinName; } /** * 汉字转换位汉语拼音,英文字符不变 * @param chines * 汉字 * @return 拼音 */ public static String converterToSpell(String chines) { String pinyinName = ""; char[] nameChar = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < nameChar.length; i++) { if (nameChar[i] > 128) { try { pinyinName += PinyinHelper.toHanyuPinyinStringArray( nameChar[i], defaultFormat)[0]; } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { pinyinName += nameChar[i]; } } return pinyinName; } /** * 字符串集合转换字符串(逗号分隔) * @author wyh * @param stringSet * @return */ public static String makeStringByStringSet(Set<String> stringSet) { StringBuilder str = new StringBuilder(); int i = 0; for (String s : stringSet) { if (i == stringSet.size() - 1) { str.append(s); } else { str.append(s + ","); } i++; } return str.toString().toLowerCase(); } /** * 获取拼音集合 * @author wyh * @param src * @return Set<String> */ public static Set<String> getPinyin(String src) { if (src != null && !src.trim().equalsIgnoreCase("")) { char[] srcChar; srcChar = src.toCharArray(); // 汉语拼音格式输出类 HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat(); // 输出设置,大小写,音标方式等 hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V); String[][] temp = new String[src.length()][]; for (int i = 0; i < srcChar.length; i++) { char c = srcChar[i]; // 是中文或者a-z或者A-Z转换拼音(我的需求,是保留中文或者a-z或者A-Z) if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) { try { temp[i] = PinyinHelper.toHanyuPinyinStringArray( srcChar[i], hanYuPinOutputFormat); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else if (((int) c >= 65 && (int) c <= 90)|| ((int) c >= 97 && (int) c <= 122)) { temp[i] = new String[] { String.valueOf(srcChar[i]) }; } else { temp[i] = new String[] { "" }; } } String[] pingyinArray = Exchange(temp); Set<String> pinyinSet = new HashSet<String>(); for (int i = 0; i < pingyinArray.length; i++) { pinyinSet.add(pingyinArray[i]); } return pinyinSet; } return null; } /** * 递归 * @author wyh * @param strJaggedArray * @return */ public static String[] Exchange(String[][] strJaggedArray) { String[][] temp = DoExchange(strJaggedArray); return temp[0]; } /** * 递归 * @author wyh * @param strJaggedArray * @return */ private static String[][] DoExchange(String[][] strJaggedArray) { int len = strJaggedArray.length; if (len >= 2) { int len1 = strJaggedArray[0].length; int len2 = strJaggedArray[1].length; int newlen = len1 * len2; String[] temp = new String[newlen]; int Index = 0; for (int i = 0; i < len1; i++) { for (int j = 0; j < len2; j++) { temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j]; Index++; } } String[][] newArray = new String[len - 1][]; for (int i = 2; i < len; i++) { newArray[i - 1] = strJaggedArray[i]; } newArray[0] = temp; return DoExchange(newArray); } else { return strJaggedArray; } } }
相关推荐
《中文转拼音工具类——pinyin4j-2.5.0.jar 在处理地址与人名中的应用》 在处理中文数据时,有时我们需要将汉字...通过合理利用pinyin4j提供的API,开发者可以极大地提高工作效率,简化涉及中文拼音转换的项目开发。
这个库不仅支持基本的拼音转换,还具备处理多音字、声调以及首字母简写等复杂情况的能力。例如,对于汉字“重”,Pinyin4j可以正确地输出其全拼“zhòng”和“chóng”,并可以根据需求选择是否保留声调。 在...
3. **使用API**:利用`PinyinHelper`提供的方法,对汉字进行拼音转换。例如,将一个汉字字符串转换为无声调的拼音列表。 ```java String str = "你好,世界"; for (int i = 0; i (); i++) { char c = str.charAt(i...
pinyin4J java拼音转换工具 java汉字转换拼音工具
《汉字转拼音:pinyin4j-jar工具详解》 在信息技术领域,处理中文字符时,经常需要将汉字转换为拼音,以便进行各种文本处理任务,如搜索、语音合成等。pinyin4j是一个广泛使用的Java库,专门用于实现这个功能。本文...
《使用pinyin4j库进行中文到拼音转换的详解》 在处理中文字符时,有时我们...通过简单调用其提供的API,开发者可以方便地处理汉字、词语乃至整个句子的拼音转换,无论是简体中文还是繁体中文,pinyin4j都能游刃有余。
总的来说,pinyin4j-2.5.0.jar是一个强大且易用的Java库,它极大地简化了汉字与拼音之间的转换过程,是处理中文字符问题时不可或缺的工具。通过合理利用这个库,开发者可以更高效地实现各种基于拼音的业务逻辑,提升...
总的来说,pinyin4j-2.5.0.jar是一个高效、实用的工具,对于处理中文拼音转换的工作提供了极大的便利。无论是在文本分析、搜索引擎优化还是其他涉及中文拼音的场景,它都能发挥重要作用。了解并熟练使用pinyin4j,...
在处理汉字到拼音转换的场景中,pinyin4j是一个不可或缺的工具。它是一个Java库,专为处理汉字转换为拼音而设计,尤其适用于需要进行中文信息处理、搜索引擎优化、或者任何需要汉字与拼音之间转换的应用程序。pinyin...
首先,pinyin4j是一个由Liu Jun开发的Java库,主要功能是将汉字转换为汉语拼音。这个库不仅支持基本的汉字转拼音,还能提供声调信息,这对于需要精确拼音处理的场景尤其有用。例如,在语音识别、搜索引擎优化(SEO)...
总结起来,pinyin4j是一个强大且实用的Java拼音处理工具,它涵盖了从基本的汉字转拼音到复杂的声调处理等多种功能,适用于各种需要汉字与拼音转换的场景。对于Java开发者来说,掌握并利用好pinyin4j,无疑能提升项目...
值得注意的是,pinyin4j不仅支持普通汉字的拼音转换,还能够处理一些特殊字符,如多音字和罕用字。此外,它还可以输出拼音的声母、韵母、声调等部分,为更复杂的应用场景提供了便利。 总的来说,pinyin4j是一个强大...
pinyin4j是一款强大的Java库,专门用于处理汉字与拼音之间的转换,它极大地简化了汉字拼音排序的过程。本文将深入探讨pinyin4j库的使用方法以及在汉字拼音排序中的应用。 一、pinyin4j简介 pinyin4j是Java平台上的...
"汉字转拼音库pinyin4j"便是这样一个工具,它提供了方便的API,使得开发者可以轻松地在Java程序中实现汉字到拼音的转换。 Pinyin4j是一个开源的Java库,由Barry DeZeng开发,它的主要功能就是将汉字转换成汉语拼音...
pinyin4j是一个开源的Java库,由Barry de Graaff 创建,主要用于处理汉字的拼音转换。它能够将汉字转换为汉语拼音,支持多音字,并且可以提供不同的拼音输出格式,如全拼、简拼以及声调标注。这个库广泛应用于Java和...
- **声调支持**:`pinyin4j`支持四种声调的转换,这意味着它可以准确地处理带有声调的汉字。 - **大小写控制**:用户可以选择转换后的拼音是全大写、全小写还是首字母大写的形式。 #### 安装与配置 为了在项目中...
总的来说,“pinyin4j拼音码获取”这一主题是Java开发中处理汉字拼音转换的关键技术,学习并掌握它有助于开发者在处理中文字符时更加游刃有余。在实际开发中,结合pinyin4j的特性,可以有效地解决与汉字拼音相关的...
Pinyin4j是一个功能强悍的汉语拼音工具包,是sourceforge.net上的一个开源项目。 主要的功能有: - 支持同一汉字有多个发音 - 支持拼音的格式化输出,比如第几声之类的 - 支持简体中文、繁体中文转换为拼音
标题"pinyin支持汉字转换拼音,汉字转换拼音缩写"表明这是一个关于汉字到拼音转换的工具或库,同时它还具备将汉字转换为拼音缩写的功能。 汉字转换拼音的原理通常基于汉语拼音方案,这是中国国家标准,规定了每个...
需要注意的是,pinyin4j库不支持繁体字和非标准汉字的拼音转换,因此在处理这类字符时需要额外考虑。 在实际应用中,pinyin4j不仅可以用于拼音转换,还可以用于构建关键词索引、拼音排序、拼音模糊搜索等功能。例如...