- 浏览: 155139 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
fengwuqing40:
zxh277100963 写道有个bug String输入数字 ...
pinyin4j 中文转成拼音(支持多音字输出) -
pimkle:
楼主说的很好 评论补充的也好 像是解决了多音字的问题 可是还需 ...
pinyin4j 中文转成拼音(支持多音字输出) -
yangjianzhouctgu:
请问org.rut.util.algorithm.SortUt ...
java排序归总 -
zxh277100963:
有个bug String输入数字 报错
修改一下
...
pinyin4j 中文转成拼音(支持多音字输出) -
gejialun88:
java环境下使用jQuery进行JSON数据传送的交互过程
pinyin4j 中文转成拼音(支持多音字输出)
- 博客分类:
- Java高级应用
最近要做一个中文转为拼音,于是联想到 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 962Spring加载Hibernate映射的 ... -
jvm调优
2012-12-25 10:42 0tomcate 报 PermGen space 错误 j ... -
软件设计中的一些原则
2012-08-01 23:23 1238——摘自网络 本文 ... -
JA-SIG CAS(v3.3)的初步总结
2012-05-04 10:22 1390CAS 配置(摘自网络,仅供产考学习交流) 一 配置实例 ... -
HTTP的请求和响应详解
2011-12-31 11:04 43352进行Web开发 ... -
Eclipse 3.3.2+JDK1.6+Ant 1.7+Openfire_src_3_5_1.zip
2011-12-10 12:49 2163说明:开发环境(IDE):Eclipse 3.3.2+JDK ... -
JAVA常用加密技术
2011-10-13 11:31 1128● BASE64 严格地说,属于编码格式,而非加密算法 ... -
DBCP,C3P0,Proxool,BoneCP参数介绍
2011-02-25 13:50 10271 Apache-DBCP: dataSource: 要连接的 ... -
Servlet应用机制初步总结
2011-02-25 13:47 10821 .首先,什么是Servlet? ... -
session 与cookie工作机制
2011-02-25 11:37 755首先我们来看个例子,笔者曾经常去的一家咖啡店有喝5杯 ... -
数据源性能优化比较
2011-02-23 18:01 1048数据源性能优化比较 DBCP,C3P0,Proxool, ... -
BoneCP数据源配置详解
2011-02-23 17:59 3737<bean id="dataSource&qu ... -
C3P0数据源配置详解
2011-02-23 17:56 1032<c3p0-config> <defau ...
相关推荐
pinyin4j能够根据中文字符获取其对应的拼音,...支持多音字,即可以获取一个中文字符的多种发音; 支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 "ˉ",阳平"ˊ",上声"ˇ",去声"ˋ")的输出。
JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进。 【JPinyin主要特性】 1、准确、完善的字库; Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体...
JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进。主要特性: 1、准确、完善的字库; Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字(异体字不...
JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进。 【JPinyin主要特性】 1、准确、完善的字库; Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
中文转拼音库 pinyin4j Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 ...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出...