- 浏览: 160556 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
fengwuqing40:
zxh277100963 写道有个bug String输入数字 ...
pinyin4j 中文转成拼音(支持多音字输出) -
pimkle:
楼主说的很好 评论补充的也好 像是解决了多音字的问题 可是还需 ...
pinyin4j 中文转成拼音(支持多音字输出) -
yangjianzhouctgu:
请问org.rut.util.algorithm.SortUt ...
java排序归总 -
zxh277100963:
有个bug String输入数字 报错
修改一下
...
pinyin4j 中文转成拼音(支持多音字输出) -
gejialun88:
java环境下使用jQuery进行JSON数据传送的交互过程
最近要做一个中文转为拼音,于是联想到 pinyin4j,网络上很多资料,可是不全,整理一下中文转成拼音(支持多音字输出)
详细代码:
package com.baison.util; 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; /******************************************************************************* * pinyin4j is a plug-in, you can kind of Chinese characters into phonetic.Multi-tone character,Tone * Detailed view http://pinyin4j.sourceforge.net/ * * @author Administrator * @ClassName: Pinyin4jUtil * @Description: TODO * @author wang_china@foxmail.com * @date Jan 13, 2012 9:28:28 AM */ public class Pinyin4jUtil { /*************************************************************************** * 获取中文汉字拼音 默认输出 * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:54:01 AM * @param chinese * @return */ public static String getPinyin(String chinese) { return getPinyinZh_CN(makeStringByStringSet(chinese)); } /*************************************************************************** * 拼音大写输出 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:58:45 AM * @param chinese * @return */ public static String getPinyinToUpperCase(String chinese) { return getPinyinZh_CN(makeStringByStringSet(chinese)).toUpperCase(); } /*************************************************************************** * 拼音小写输出 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:58:45 AM * @param chinese * @return */ public static String getPinyinToLowerCase(String chinese) { return getPinyinZh_CN(makeStringByStringSet(chinese)).toLowerCase(); } /*************************************************************************** * 首字母大写输出 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 10:00:54 AM * @param chinese * @return */ public static String getPinyinFirstToUpperCase(String chinese) { return getPinyin(chinese); } /*************************************************************************** * 拼音简拼输出 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 11:08:15 AM * @param chinese * @return */ public static String getPinyinJianPin(String chinese) { return getPinyinConvertJianPin(getPinyin(chinese)); } /*************************************************************************** * 字符集转换 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:34:11 AM * @param chinese * 中文汉字 * @throws BadHanyuPinyinOutputFormatCombination */ public static Set<String> makeStringByStringSet(String chinese) { char[] chars = chinese.toCharArray(); if (chinese != null && !chinese.trim().equalsIgnoreCase("")) { char[] srcChar = chinese.toCharArray(); String[][] temp = new String[chinese.length()][]; for (int i = 0; i < srcChar.length; i++) { char c = srcChar[i]; // 是中文或者a-z或者A-Z转换拼音 if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) { try { temp[i] = PinyinHelper.toHanyuPinyinStringArray( chars[i], getDefaultOutputFormat()); } 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> zhongWenPinYin = new HashSet<String>(); for (int i = 0; i < pingyinArray.length; i++) { zhongWenPinYin.add(pingyinArray[i]); } return zhongWenPinYin; } return null; } /*************************************************************************** * Default Format 默认输出格式 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:35:51 AM * @return */ public static HanyuPinyinOutputFormat getDefaultOutputFormat() { HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写 format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 没有音调数字 format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);// u显示 return format; } /*************************************************************************** * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:39:54 AM * @param strJaggedArray * @return */ public static String[] Exchange(String[][] strJaggedArray) { String[][] temp = DoExchange(strJaggedArray); return temp[0]; } /*************************************************************************** * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:39:47 AM * @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] = capitalize(strJaggedArray[0][i]) + capitalize(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; } } /*************************************************************************** * 首字母大写 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:36:18 AM * @param s * @return */ public static String capitalize(String s) { char ch[]; ch = s.toCharArray(); if (ch[0] >= 'a' && ch[0] <= 'z') { ch[0] = (char) (ch[0] - 32); } String newString = new String(ch); return newString; } /*************************************************************************** * 字符串集合转换字符串(逗号分隔) * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:37:57 AM * @param stringSet * @return */ public static String getPinyinZh_CN(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(); } /*************************************************************************** * 获取每个拼音的简称 * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 11:05:58 AM * @param chinese * @return */ public static String getPinyinConvertJianPin(String chinese) { String[] strArray = chinese.split(","); String strChar = ""; for (String str : strArray) { char arr[] = str.toCharArray(); // 将字符串转化成char型数组 for (int i = 0; i < arr.length; i++) { if (arr[i] >= 65 && arr[i] < 91) { // 判断是否是大写字母 strChar += new String(arr[i] + ""); } } strChar += ","; } return strChar; } /*************************************************************************** * Test * * @Name: Pinyin4jUtil.java * @Description: TODO * @author: wang_chian@foxmail.com * @version: Jan 13, 2012 9:49:27 AM * @param args */ public static void main(String[] args) { String str = "张三"; System.out.println("小写输出:" + getPinyinToLowerCase(str)); System.out.println("大写输出:" + getPinyinToUpperCase(str)); System.out.println("首字母大写输出:" + getPinyinFirstToUpperCase(str)); System.out.println("简拼输出:" + getPinyinJianPin(str)); } }
- pinyin4j-2.5.0.jar (184.5 KB)
- 下载次数: 195
评论
3 楼
fengwuqing40
2014-01-22
zxh277100963 写道
有个bug String输入数字 报错
修改一下
但是输出还是没数字
修改一下这
修改一下
public static String capitalize(String s) { char ch[]; ch = s.toCharArray(); [color=red] if (ch!= null && ch.length > 0) { //修改[/color] if (ch[0] >= 'a' && ch[0] <= 'z') { ch[0] = (char) (ch[0] - 32); } } String newString = new String(ch); return newString; }
但是输出还是没数字
修改一下这
else { temp[i] = new String[] { String.valueOf(srcChar[i]) }; }
<b>如果需要输出数字,可修改getPinyinConvertJianPin方法中的if条件:<br/>
if (arr[i] >= 65 && arr[i] < 91 ||
(arr[i]>=48 && arr[i]<=57)) { // 判断是否是大写字母
strChar += new String(arr[i] + "");
}</b>
2 楼
pimkle
2013-05-30
楼主说的很好 评论补充的也好 像是解决了多音字的问题 可是还需要用户自己来选择........
1 楼
zxh277100963
2012-08-09
有个bug String输入数字 报错
修改一下
但是输出还是没数字
修改一下这
修改一下
public static String capitalize(String s) { char ch[]; ch = s.toCharArray(); [color=red] if (ch!= null && ch.length > 0) { //修改[/color] if (ch[0] >= 'a' && ch[0] <= 'z') { ch[0] = (char) (ch[0] - 32); } } String newString = new String(ch); return newString; }
但是输出还是没数字
修改一下这
else { temp[i] = new String[] { String.valueOf(srcChar[i]) }; }
发表评论
-
Spring加载Hibernate映射的几种方式及区别
2013-07-02 11:52 1008Spring加载Hibernate映射的 ... -
jvm调优
2012-12-25 10:42 0tomcate 报 PermGen space 错误 j ... -
软件设计中的一些原则
2012-08-01 23:23 1324——摘自网络 本文 ... -
JA-SIG CAS(v3.3)的初步总结
2012-05-04 10:22 1495CAS 配置(摘自网络,仅供产考学习交流) 一 配置实例 ... -
HTTP的请求和响应详解
2011-12-31 11:04 43598进行Web开发 ... -
Eclipse 3.3.2+JDK1.6+Ant 1.7+Openfire_src_3_5_1.zip
2011-12-10 12:49 2233说明:开发环境(IDE):Eclipse 3.3.2+JDK ... -
JAVA常用加密技术
2011-10-13 11:31 1208● BASE64 严格地说,属于编码格式,而非加密算法 ... -
DBCP,C3P0,Proxool,BoneCP参数介绍
2011-02-25 13:50 10721 Apache-DBCP: dataSource: 要连接的 ... -
Servlet应用机制初步总结
2011-02-25 13:47 11351 .首先,什么是Servlet? ... -
session 与cookie工作机制
2011-02-25 11:37 807首先我们来看个例子,笔者曾经常去的一家咖啡店有喝5杯 ... -
数据源性能优化比较
2011-02-23 18:01 1048数据源性能优化比较 DBCP,C3P0,Proxool, ... -
BoneCP数据源配置详解
2011-02-23 17:59 3801<bean id="dataSource&qu ... -
C3P0数据源配置详解
2011-02-23 17:56 1079<c3p0-config> <defau ...
相关推荐
《pinyin4j:解决中文多音字问题的利器》 在中文处理中,多音字是一个常见的挑战。多音字是指一个汉字有多个读音,根据不同的语境和组合,其发音会有所不同。例如,“长”既可以读作“cháng”,也可以读作“zhǎng...
`Pinyin4j`是一个流行的Java库,专门用于处理汉字与拼音之间的转换,包括多音字的支持。使用这个库,开发者可以方便地获取汉字的声母、韵母以及声调等信息。 以下是一个简单的`Pinyin4j`使用示例: ```java import...
在Java开发中,有时候我们需要将汉字转换成对应的汉语拼音,以便进行各种处理,如搜索、排序或者处理多音字问题。这时,`pinyin4j-2.5.0`这个开源库就显得尤为重要。它是一个强大的工具,能够帮助开发者轻松地实现...
4. **处理特殊情况**:`pinyin4j`还支持处理多音字、声调、保留首字母等多种场景。例如,如果你想获取首字母,可以使用`toHanyuPinyinInitialsString()`方法;如果希望保留声调,可以使用`toHanyuPinyinStringArray...
《中文转拼音工具类——pinyin4j-2.5.0.jar 在处理地址与人名中的应用》 在处理中文数据时,有时我们需要将汉字转换为拼音,以便进行搜索、排序或者国际化处理。这时,一个高效且准确的中文转拼音工具显得尤为重要...
总结起来,pinyin4j-jar是一个强大的汉字转拼音工具,它提供了灵活的拼音输出格式设置,能有效处理多音字问题,广泛适用于各种需要汉字转拼音的场景。通过掌握其使用方法,开发者可以更高效地进行中文字符处理,提高...
总的来说,Java中的汉字转拼音、首字母获取以及多音字处理主要依赖于像`pinyin4j`这样的第三方库,它们提供了丰富的功能,使得开发者能方便地进行中文字符的拼音处理。在实际项目中,正确理解和运用这些工具,可以...
它支持多种拼音表示方式,包括全拼、简拼、声母、韵母等,同时也能够处理多音字和不常见的汉字,极大地扩展了Java处理中文的能力。此外,pinyin4j还提供了一些实用的辅助功能,如拼音排序、拼音比较等,为开发者提供...
此外,pinyin4j还支持多音字的处理,能够根据上下文提供最可能的读音。 除了pinyin4j库本身,这次提供的压缩包还包含了"Sparta库"的源代码。Sparta并不是pinyin4j的直接依赖,但它可能是pinyin4j在某些场景下使用的...
这个库不仅支持基本的拼音转换,还具备处理多音字、声调以及首字母简写等复杂情况的能力。例如,对于汉字“重”,Pinyin4j可以正确地输出其全拼“zhòng”和“chóng”,并可以根据需求选择是否保留声调。 在...
总的来说,汉字转拼音是处理中文信息的重要技术,Pinyin4j作为Java和Android平台上的强大工具,能够有效地帮助我们完成这项任务,即使是面对多音字这样的复杂情况。在实际项目中,结合上下文判断和用户交互,我们...
除了基本的转换功能,`pinyin4j`还支持处理多音字,即根据上下文判断汉字的正确读音。此外,库中的`PinyinFormat`枚举类型提供了多种拼音格式设置,可以根据需求进行选择。 总的来说,`pinyin4j-2.5.0.jar`是一个...
pinyin4j还提供了更复杂的功能,如获取单个字符的声母、韵母和声调,以及对多音字进行智能处理等。例如,获取汉字“一”的声母: ```java char c = '一'; String[] initials = PinyinHelper.getInitials(c, ...
1. **汉字转拼音**:pinyin4j可以将单个汉字或字符串中的所有汉字转化为对应的拼音。它支持多种输出格式,如全拼、简拼、声母、韵母等。此外,它还能处理多音字,根据上下文提供最合适的读音。 2. **声调处理**:...
值得注意的是,pinyin4j不仅支持普通汉字的拼音转换,还能够处理一些特殊字符,如多音字和罕用字。此外,它还可以输出拼音的声母、韵母、声调等部分,为更复杂的应用场景提供了便利。 总的来说,pinyin4j是一个强大...
它能够将汉字转换为汉语拼音,支持多音字,并且可以提供不同的拼音输出格式,如全拼、简拼以及声调标注。这个库广泛应用于Java和Android开发中,因为它的性能高效且易于集成。 在Android项目中,首先你需要将pinyin...
它支持全拼和简拼,并且可以处理多音字,提供多种输出格式,如首字母、完整拼音等。 2. **安装与引入**:在项目中使用pinyin4j,首先需要将lib目录下的jar文件添加到项目的类路径中。如果是Maven项目,可以通过在...
这个库不仅能够提供基本的汉字转拼音功能,还支持多音字的处理,以及拼音的声调标注,使得在Java环境下进行中文处理变得更加便捷。 Pinyin4j的核心功能包括: 1. **基本转换**:Pinyin4j能够将单个汉字或整个中文...
在实际应用中,还需要考虑一些细节问题,如如何处理多音字(一个字有多个读音)、如何处理未登录词(不在字典中的词汇)以及如何优化拼音匹配算法(如Levenshtein距离、Jaccard相似度等)。同时,为了提高用户体验,...
3. 处理多音字:某些汉字有多个读音,pinyin4j可以处理这种情况。例如,汉字“还”有两个读音“hái”和“huán”,`PinyinHelper.toHanyuPinyinStringArray('还')`将返回`["hái", "huán"]`。 4. 声调处理:pinyin...