pinyin4j是一个功能强悍的汉语拼音工具包,主要是从汉语获取各种格式和需求的拼音,功能强悍,下面看看如何使用pinyin4j。
下面介绍用pinyin4j来做的一个根据汉语获取各种格式和需求的拼音demo
需要pinyin4j.jar自己去官网下载去吧http://pinyin4j.sourceforge.net/

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. import net.sourceforge.pinyin4j.PinyinHelper;
  4. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  5. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  6. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  7. import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
  8. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  9. /**
  10. *
  11. * @author  : Robert robert@xiaobei668.com
  12. * @version : 1.00
  13. * Create Time : 2011-3-22-下午07:04:30
  14. * Description :
  15. *              处理汉字和对应拼音转换的工具类
  16. * History:
  17. *  Editor       version      Time               Operation    Description*
  18. *
  19. *
  20. */
  21. public class PinYinUtil {
  22. /**
  23. *
  24. * @param src
  25. * @return
  26. * author  : Robert
  27. * about version :1.00
  28. * create time   : 2011-3-22-下午07:04:27
  29. * Description :
  30. *             传入汉字字符串,拼接成对应的拼音,返回拼音的集合
  31. */
  32. public static Set<String> getPinYinSet(String src){
  33. Set<String> lstResult = new HashSet<String>();
  34. char[] t1 = null;  //字符串转换成char数组
  35. t1 = src.toCharArray();
  36. //①迭代汉字
  37. for(char ch : t1){
  38. String s[] = getPinYin(ch);
  39. Set<String> lstNew = new HashSet<String>();
  40. //②迭代每个汉字的拼音数组
  41. for(String str : s){
  42. if(lstResult.size()==0){
  43. lstNew.add(str);
  44. }else{
  45. for(String ss : lstResult){
  46. ss += str;
  47. lstNew.add(ss);
  48. }
  49. }
  50. }
  51. lstResult.clear();
  52. lstResult = lstNew;
  53. }
  54. return lstResult;
  55. }
  56. public static void main(String[] args) {
  57. Set<String> lst = PinYinUtil.getPinYinSet("迭代每个汉字的拼音数组,该分享来自程序员之家");
  58. for (String string : lst) {
  59. System.out.println(string);
  60. }
  61. }
  62. /**
  63. *
  64. * @param src
  65. * @return
  66. * author  : Robert
  67. * about version :1.00
  68. * create time   : 2011-3-22-下午02:21:42
  69. * Description :
  70. *             传入中文汉字,转换出对应拼音
  71. *             注:出现同音字,默认选择汉字全拼的第一种读音
  72. */
  73. public static String getPinYin(String src) {
  74. char[] t1 = null;
  75. t1 = src.toCharArray();
  76. String[] t2 = new String[t1.length];
  77. // 设置汉字拼音输出的格式
  78. HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
  79. t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  80. t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  81. t3.setVCharType(HanyuPinyinVCharType.WITH_V);
  82. String t4 = "";
  83. int t0 = t1.length;
  84. try {
  85. for (int i = 0; i < t0; i++) {
  86. // 判断能否为汉字字符
  87. // System.out.println(t1[i]);
  88. if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
  89. t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中
  90. t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
  91. } else {
  92. // 如果不是汉字字符,间接取出字符并连接到字符串t4后
  93. t4 += Character.toString(t1[i]);
  94. }
  95. }
  96. } catch (BadHanyuPinyinOutputFormatCombination e) {
  97. e.printStackTrace();
  98. }
  99. return t4;
  100. }
  101. /**
  102. * @param src
  103. * @return
  104. * author  : Robert
  105. * about version :1.00
  106. * create time   : 2011-3-22-下午02:52:35
  107. * Description :
  108. *             将单个汉字转换成汉语拼音,考虑到同音字问题,返回字符串数组的形式
  109. */
  110. public static String[] getPinYin(char src){
  111. char[] t1 = {src};
  112. String[] t2 = new String[t1.length];
  113. // 设置汉字拼音输出的格式
  114. HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
  115. t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  116. t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  117. t3.setVCharType(HanyuPinyinVCharType.WITH_V);
  118. // 判断能否为汉字字符
  119. if (Character.toString(t1[0]).matches("[\\u4E00-\\u9FA5]+")) {
  120. try {
  121. // 将汉字的几种全拼都存到t2数组中
  122. t2 = PinyinHelper.toHanyuPinyinStringArray(t1[0], t3);
  123. } catch (BadHanyuPinyinOutputFormatCombination e) {
  124. e.printStackTrace();
  125. }
  126. } else {
  127. // 如果不是汉字字符,则把字符直接放入t2数组中
  128. t2[0] = String.valueOf(src);
  129. }
  130. return t2;
  131. }
  132. /**
  133. *
  134. * @param src
  135. * @return
  136. * author  : Robert
  137. * about version :1.00
  138. * create time   : 2011-3-22-下午03:03:02
  139. * Description :
  140. *             传入没有多音字的中文汉字,转换出对应拼音
  141. *             注:如果传入的中文中有任一同音字都会返回字符串信息:false
  142. */
  143. public static String getNoPolyphone(String src){
  144. char[] t1 = null;
  145. t1 = src.toCharArray();
  146. String[] t2 = new String[t1.length];
  147. // 设置汉字拼音输出的格式
  148. HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
  149. t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  150. t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  151. t3.setVCharType(HanyuPinyinVCharType.WITH_V);
  152. String t4 = "";
  153. int t0 = t1.length;
  154. try {
  155. for (int i = 0; i < t0; i++) {
  156. // 判断能否为汉字字符
  157. // System.out.println(t1[i]);
  158. if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
  159. t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中
  160. if(t2.length>1){
  161. return "false";
  162. }else{
  163. t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
  164. }
  165. } else {
  166. // 如果不是汉字字符,间接取出字符并连接到字符串t4后
  167. t4 += Character.toString(t1[i]);
  168. }
  169. }
  170. } catch (BadHanyuPinyinOutputFormatCombination e) {
  171. e.printStackTrace();
  172. }
  173. return t4;
  174. }
  175. }

复制代码

推荐文章:Java根据汉字字符串检索出字符首字母

转载自:http://bbs.it-home.org/thread-3093-1-1.html

[Java代码] Java用pinyin4j根据汉语获取各种格式和需求的拼音的更多相关文章

  1. java 代码实现使用Druid 链接池获取数据库链接

    因为原先使用的c3p0链接池,时常出现:APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks,以及出 ...

  2. [改善Java代码]Java的泛型是类型擦除的

    泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generi ...

  3. [Java代码] Java是自学好还是参加培训班好?

    ava 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言. Java可运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统. 本教程给大家简单介 ...

  4. java代码-----------java中的windowAdapter的实例

    总结:我知道他是一专多能型.很优秀~~~~~~~~~~~.好幸福啊 package com.a.b; import java.awt.Color; import java.awt.event.Wind ...

  5. python调用java代码 java虚拟机(jvm)

    1.新建com文件夹,在里面新建 fibnq.java package com; public class fibnq { public fibnq(){} public int fb(int n){ ...

  6. wsdl 生成 java 代码 java 使用CXF将wsdl文件生成客户端代码命令java调用第三方的webservice应用实例 推荐使用, 并且设置了 utf8

    推荐使用, 并且设置了 utf8 wsdl2java -p cn.smborderservice  -encoding utf-8 -d f:\logink\src -all -autoNameRes ...

  7. JAVA代码实现嵌套层级列表,POI导出嵌套层级列表

    要实现POI导出EXCEL形如 --A1(LV1) ----B1(LV2) ----B2(LV2) ------C1(LV3) ------C2(LV3) ----B3(LV2) --A1(LV1)

  8. 使用非java代码编程

    使用非JAVA代码     JAVA语言及其标准API(应用程序编程接口)应付应用程序的编写已绰绰有余.但在某些情况下,还是必须使用非JAVA编码.例如,我们有时要访问操作系统的专用特性,与特殊的硬件 ...

  9. Java代码更改shape和selector文件的颜色值

    Android里面经常会使用shape或者selector来定制一些View的背景.那么如果想要动态更改shape或者seletor文件中的颜色值,该怎么处理呢? 一.Java代码更改shape的颜色 ...

随机推荐

  1. [BZOJ1977][BeiJing2010组队]次小生成树

    题解: 首先要证明一个东西 没有重边的图上 次小生成树由任何一颗最小生成树替换一条边 但是我不会证啊啊啊啊啊啊啊 然后就很简单了 枚举每一条边看看能不能变 但有一个特殊情况就是,他和环上的最大值相等, ...

  2. 【Android】 textview 中超出屏幕宽度的字符 省略号显示

    当利用textview显示内容时,显示内容过多可能会折行或显示不全,那样效果很不好. 实现如下: <TextView android:layout_width="fill_parent ...

  3. 【Android】android:manageSpaceActivity让应用手动管理应用的数据目录

    今天在Android遇到一个需求,不允许用户完全清除应用私有目录(/data/data/包名/),但是Android默认情况下用户通过在应用信息里面点击清除数据按钮把所有的应用私有目录下的的数据文件完 ...

  4. Vim的合并行操作

    日常常用到多行合并的功能,记录如下: 第一种, 多行合并成一行,即: AAAAABBBBBCCCCC 合并为:AAAAA BBBBB CCCCC 方法1: normal状态下 3J 其中的3是范围,可 ...

  5. Jenkins的介绍

    在公司看见有的部门在使用这个工具,好奇一下,今天就开始学习一番. 1.官网 https://jenkins.io/ 2.介绍 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用 ...

  6. ESP8266进阶篇

    ESP8266进阶篇 20170225(应需要,继续使用此模块!!!) 说一下如何通过内网和外网来控制我的ESP8266的数据模块 1.内网控制:(要求手机直接连接在ESP8266的WIFI上面,使用 ...

  7. HDU-1013的解题报告

    题目来源:hdu-1013 题意:正整数的数字根是通过求整数的整数而求出的.如果结果值是一个位数,那么这个数字就是数字根.如果结果值包含两个或多个数字,则将这些数字相加并重复该过程.只要需要获得一个数 ...

  8. Square Destroyer-POJ 1084 (IDA*)

    Description The left figure below shows a complete 3*3 grid made with 2*(3*4) (=24) matchsticks. The ...

  9. Dotnet core结合jquery的前后端加密解密密码密文传输的实现

    在一个正常的项目中,登录注册的密码是密文传输到后台服务端的,也就是说,首先前端js对密码做处理,随后再传递到服务端,服务端解密再加密传出到数据库里面.Dotnet已经提供了RSA算法的加解密类库,我们 ...

  10. 理解Array.prototype.slice.call(arguments)

    在很多时候经常看到Array.prototype.slice.call()方法,比如Array.prototype.slice.call(arguments),下面讲一下其原理: 1.基本讲解 1.在 ...