Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。

Support Chinese character (both Simplified and Tranditional) to most popular Pinyin systems, including Hanyu Pinyin, Tongyong Pinyin, Wade-Giles, MPS2, Yale and Gwoyeu Romatzyh. Support multiple pronounciations and customized output.

pinyin4j是一个支持将中文转换到拼音的Java开源类库。

POM引入:

  1. <dependency>
  2. <groupId>net.sourceforge.pinyin4j</groupId>
  3. <artifactId>pinyin4j</artifactId>
  4. <version>2.5.0</version>
  5. </dependency>

项目地址:

https://sourceforge.net/projects/pinyin4j/

实用示例,如果一个汉字是多音字,那么将采取组装所有可能的组合:

  1. package com.javacui.lucene.pinyin;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. import com.alibaba.fastjson.JSON;
  5. import net.sourceforge.pinyin4j.PinyinHelper;
  6. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  7. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  8. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  9. import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
  10. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  11. /**
  12. * 打印中文拼音的所有组合
  13. */
  14. public class Pinyin4j {
  15. public static void main(String[] args) {
  16. String cnStr = "长沙市重庆市";
  17. System.out.println(makePinyin(cnStr));
  18. }
  19. /**
  20. * 字符串凑集转换字符串(逗号分隔)
  21. */
  22. public static String makeStringByStringSet(Set<String> stringSet) {
  23. StringBuilder str = new StringBuilder();
  24. int i = 0;
  25. for (String s : stringSet) {
  26. if (i == stringSet.size() - 1) {
  27. str.append(s);
  28. } else {
  29. str.append(s + ",");
  30. }
  31. i++;
  32. }
  33. return str.toString().toLowerCase();
  34. }
  35. /**
  36. * 获取拼音凑集
  37. */
  38. public static Set<String> getPinyin(String src) {
  39. if (src != null && !src.trim().equalsIgnoreCase("")) {
  40. char[] srcChar;
  41. srcChar = src.toCharArray();
  42. // 汉语拼音格局输出类
  43. HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat();
  44. // 输出设置,大小写,音标体式格式等
  45. hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  46. // HanyuPinyinToneType.WITH_TONE_NUMBER 用数字表示声调,例如:liu2
  47. // HanyuPinyinToneType.WITHOUT_TONE 无声调表示,例如:liu
  48. // HanyuPinyinToneType.WITH_TONE_MARK 用声调符号表示,例如:liú
  49. hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  50. hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
  51. String[][] temp = new String[src.length()][];
  52. for (int i = 0; i < srcChar.length; i++) {
  53. char c = srcChar[i];
  54. // 是中文或者a-z或者A-Z转换拼音(根据需求来)
  55. if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) {
  56. try {
  57. temp[i] = PinyinHelper.toHanyuPinyinStringArray(srcChar[i], hanYuPinOutputFormat);
  58. } catch (BadHanyuPinyinOutputFormatCombination e) {
  59. e.printStackTrace();
  60. }
  61. } else if (((int) c >= 65 && (int) c <= 90) || ((int) c >= 97 && (int) c <= 122)) {
  62. temp[i] = new String[] { String.valueOf(srcChar[i]) };
  63. } else {
  64. temp[i] = new String[] { "" };
  65. }
  66. }
  67. System.out.println("中文单词分解:"+JSON.toJSONString(temp));
  68. String[] pingyinArray = Exchange(temp);
  69. Set<String> pinyinSet = new HashSet<String>();
  70. for (int i = 0; i < pingyinArray.length; i++) {
  71. pinyinSet.add(pingyinArray[i]);
  72. }
  73. return pinyinSet;
  74. }
  75. return null;
  76. }
  77. /**
  78. * 递归
  79. */
  80. public static String[] Exchange(String[][] strJaggedArray) {
  81. String[][] temp = DoExchange(strJaggedArray);
  82. return temp[0];
  83. }
  84. /**
  85. * 递归
  86. */
  87. private static String[][] DoExchange(String[][] strJaggedArray) {
  88. int len = strJaggedArray.length;
  89. if (len >= 2) {
  90. int len1 = strJaggedArray[0].length;
  91. int len2 = strJaggedArray[1].length;
  92. int newlen = len1 * len2;
  93. String[] temp = new String[newlen];
  94. int Index = 0;
  95. for (int i = 0; i < len1; i++) {
  96. for (int j = 0; j < len2; j++) {
  97. temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j];
  98. Index++;
  99. }
  100. }
  101. String[][] newArray = new String[len - 1][];
  102. for (int i = 2; i < len; i++) {
  103. newArray[i - 1] = strJaggedArray[i];
  104. }
  105. newArray[0] = temp;
  106. return DoExchange(newArray);
  107. } else {
  108. return strJaggedArray;
  109. }
  110. }
  111. public static String makePinyin(String str){
  112. Set<String> set = getPinyin(str);
  113. System.out.println("中文单词组合:"+JSON.toJSONString(set));
  114. return makeStringByStringSet(set);
  115. }
  116. }

中文转拼音,pinyin4j实用示例的更多相关文章

  1. java 中文转拼音之pinyin4j

    一.简介 有时候,须要将汉字编程相应的拼音.以方便数据的处理.比方在Android手机应用的开发上.要查询联系人的姓名.通常都是用拼音进行查询的. 比方要查询"曹孟德",就能够输入 ...

  2. Java 中文转换拼音工具

    Java 中文转换拼音工具 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p&g ...

  3. Mono 3.2 测试NPinyin 中文转换拼音代码

    C#中文转换为拼音NPinyin代码  在Mono 3.2下运行正常,Spacebuilder 有使用到NPinyin组件,代码兼容性没有问题. using System; using System. ...

  4. PHP如何将中文转换为拼音

    用来得到中文的首字母: 这个是将中文转换为拼音的类:charset <?php/*** 汉字转化为拼音,拼音转化为汉字**/ class charset{private $_code=array ...

  5. Linux 中 17 个 tar 命令实用示例

    Tar(Tape ARchive,磁带归档的缩写,LCTT 译注:最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类 Unix 系统中使用最广泛的命令,用于归 ...

  6. php 获取中文字符拼音首字母

    //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){return '';} $fchar=ord($str{}); }); ...

  7. C# 中文转拼音类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SU { ...

  8. SQL 用中文的拼音和笔画排序

    SQL 用中文的拼音和笔画排序   城市按拼音排序: SELECT chineseName FROM [表名] order by chinesename collate Chinese_PRC_CS_ ...

  9. NPinyin 中文转换拼音代码

    Mono 3.2 测试NPinyin 中文转换拼音代码   C#中文转换为拼音NPinyin代码  在Mono 3.2下运行正常,Spacebuilder 有使用到NPinyin组件,代码兼容性没有问 ...

随机推荐

  1. AsyncTaskMethodBuilder

    AsyncTaskMethodBuilder Represents a builder for asynchronous methods that return a task. public stru ...

  2. Python关于%matplotlib inline

    Python关于%matplotlib inline %matplotlib inline 是一个魔法函数(Magic Functions).官方给出的定义是:IPython有一组预先定义好的所谓的魔 ...

  3. sentinel.conf样例

    #禁止用localhost与127.0.0.1# Example sentinel.conf # 哨兵sentinel实例运行的端口 默认26379port 26379 # 哨兵sentinel的工作 ...

  4. Spring mvc中@RequestMapping 基本用法

    @RequestMapping(value="/departments") public String simplePattern(){ System.out.println(&q ...

  5. ts-loader如何与vue单文件组件衔接

    .ts-loader是如何与vue单文件组件衔接作用的 https://github.com/microsoft/TypeScript-Vue-Starter https://www.npmjs.co ...

  6. 集群中配置多台机器之间 SSH 免密码登录

    集群中配置多台机器之间 SSH 免密码登录 问题描述 由于现在项目大多数由传统的单台机器部署,慢慢转变成多机器的集群化部署. 但是,这就涉及到机器间的 SSH 免密码互通问题. 当集群机器比较多的时候 ...

  7. MYSQL查询今天、昨天、7天前、30天、本月数据

    今天: SELECT * FROM 表名 WHERE TO_DAYS( 时间字段名) = TO_DAYS(NOW()); 昨天: SELECT * FROM 表名 WHERE TO_DAYS( NOW ...

  8. MongoDB数据节点基础操作

    1.查看集群中各节点的状态: rs0:PRIMARY> rs.status() 2.查看集群中各节点配置情况: rs0:PRIMARY> rs.conf() 3.主节点降级为从节点: rs ...

  9. Nginx反向代理后应用程序获取客户端真实IP

    Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的 ...

  10. python中的set集合

    当使用爬虫URL保存时,一般会选择set来保存urls,set是集合,集合中的元素不能重复,其次还有交集,并集等集合的功能, 爬虫每次获取的网页中提取网页中的urls,并保存,这就需要利用urls = ...