java实现汉字转拼音

一、问题描述
汉字转化为对应的拼音或者获取汉字拼音的首字母,这些都是在开发中经常遇到的问题,在获取汉字的拼音或者拼音的首字母之后,我们在推荐或者搜索部门可以很大程度提高用户的体验,比如用户输入“NH”,我们就可以联想出“你好”、“你会”、“年后”、“内涵”等词语。在Java中,pinyin4j.jar这个工具很好实现了将汉字转化为对应的拼音,下面我们就介绍下如何使用这个jar包。

二、资源下载
下载之后解压,直接使用文件中的pinyin4j-2.5.0.jar即可。

三、提供方法
我们可以使用HanyuPinyinOutputFormat类来设置拼音的返回方式,比如设置拼音的大小写、音标方式以及拼音ü的显示形式,具体如下图:

直接使用PinyinHelper中的方法来对汉字做对应的转化,具体有如下三种,三种效果如何自己做下测试即可:

四、编写代码
针对我们平常可能用到的功能,我做了如下的封装,提供的功能还有具体的实现步骤参照代码中的注释:

package com.lulei.util;
import java.util.ArrayList;
import java.util.List; 

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; 

public class PinYinUtil {
  private static HanyuPinyinOutputFormat format = null;
  static {
    format = new HanyuPinyinOutputFormat();
    //拼音小写
    format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    //无音标方式;WITH_TONE_NUMBER:1-4数字表示英标;WITH_TONE_MARK:直接用音标符(必须WITH_U_UNICODE否则异常
    format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    //用v表示ü
    format.setVCharType(HanyuPinyinVCharType.WITH_V);
  } 

  /**
   * @param str
   * @return
   * @Description: 返回字符串的拼音
   */
  public static String[] getCharPinYinString(String str) {
    if (str == null || str.length() < 1) {
      return null;
    }
    List<String> result = new ArrayList<String>();
    //对字符串中的记录逐个分析
    for (int i = 0; i < str.length(); i++) {
      result = getCharPinYinString(str.charAt(i), result);
    }
    return result.toArray(new String[result.size()]);
  } 

  /**
   * @param c
   * @param list
   * @return
   * @Description: 将字符c的拼音拼接到list中的记录中
   */
  private static List<String> getCharPinYinString(char c, List<String> list) {
    String[] strs = getCharPinYinString(c);
    List<String> result = new ArrayList<String>();
    //如果解析出的拼音为空,判断字符C是否为英文字母,如果是英文字母则添加值拼音结果中
    if (strs == null) {
      if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
        c = c <= 91 ? (char)(c + 32) : c;
        if (list == null || list.size() == 0) {
          result.add(c + "");
        } else {
          for (String s : list) {
            result.add(s + c);
          }
        }
        return result;
      }
      return list;
    }
    //将字符C的拼音首和已存在的拼音首组合成新的记录
    for (String str : strs) {
      if (list == null || list.size() == 0) {
        result.add(str);
      } else {
        for (String s : list) {
          result.add(s + str);
        }
      }
    }
    return result;
  } 

  /**
   * @param c
   * @return
   * @Description: 返回汉字的拼音
   */
  public static String[] getCharPinYinString(char c) {
    try {
      //返回字符C的拼音
      return PinyinHelper.toHanyuPinyinStringArray(c, format);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  } 

  /**
   * @param str
   * @return
   * @Description: 返回字符串的拼音的首字母
   */
  public static String[] getCharPinYinChar(String str) {
    if (str == null || str.length() < 1) {
      return null;
    }
    List<String> result = new ArrayList<String>();
    //对字符串中的记录逐个分析
    for (int i = 0; i < str.length(); i++) {
      result = getCharPinYinChar(str.charAt(i), result);
    }
    return result.toArray(new String[result.size()]);
  } 

  /**
   * @param c
   * @param list
   * @return
   * @Description: 将字符c的拼音首字母拼接到list中的记录中
   */
  private static List<String> getCharPinYinChar(char c, List<String> list) {
    char[] chars = getCharPinYinChar(c);
    List<String> result = new ArrayList<String>();
    //如果解析出的拼音为空,判断字符C是否为英文字母,如果是英文字母则添加值拼音结果中
    if (chars == null) {
      if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
        c = c < 91 ? (char)(c + 32) : c;
        if (list == null || list.size() == 0) {
          result.add(c + "");
        } else {
          for (String s : list) {
            result.add(s + c);
          }
        }
        return result;
      }
      return list;
    }
    //将字符C的拼音首字母和已存在的拼音首字母组合成新的记录
    for (char ch : chars) {
      if (list == null || list.size() == 0) {
        result.add(ch + "");
      } else {
        for (String s : list) {
          result.add(s + ch);
        }
      }
    }
    return result;
  } 

  /**
   * @param c
   * @return
   * @Description:返回汉字拼音首字母
   */
  public static char[] getCharPinYinChar(char c) {
    //字符C的拼音
    String[] strs = getCharPinYinString(c);
    if (strs != null) {
      //截取拼音的首字母
      char[] chars = new char[strs.length];
      for(int i = 0; i <chars.length; i++) {
        chars[i] = strs[i].charAt(0);
      }
      return chars;
    }
    return null;
  } 

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    char c = "重庆".charAt(0);
    String[] str = PinYinUtil.getCharPinYinString(c);
    for(String s : str) {
      System.out.println(s);
    } 

    char[] chars = PinYinUtil.getCharPinYinChar(c);
    for(char c1 : chars) {
      System.out.println(c1);
    } 

    str = PinYinUtil.getCharPinYinString("重庆c");
    for(String s : str) {
      System.out.println(s);
    } 

    str = PinYinUtil.getCharPinYinChar("重庆a");
    for(String s : str) {
      System.out.println(s);
    }
  } 

} 

五、输出结果

以上就是java实现汉字转拼音的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • Java中汉字转拼音pinyin4j用法实例分析

    本文实例讲述了Java中汉字转拼音pinyin4j用法.分享给大家供大家参考,具体如下: 汉字转换拼音在日常开发中是个很常见的问题.例如我们伟大的12306,在地名中输入"WH",就会出现"武汉""芜湖""威海"等地名,输入"WUHU"就会出现"芜湖". Java获取汉字的拼音,pinyin4j这个库可以很好的解决这个问题. 下载地址:http://sourceforge.net/pro

  • java中实现汉字按照拼音排序(示例代码)

    最近項目中需要對繁體字按拼音進行排序 复制代码 代码如下: public static void main(String[] args) { Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); String[] arr = { "张三", "李四", "王五", "刘六" ,"周濤","戴笠","戴阿&q

  • Java获取汉字对应的拼音(全拼或首字母)

    Java 根据汉语字符串获得对应的拼音字符串或者拼音首字母字符串等操作,需要添加jar包: 引入pinyin4j-2.5.0.jar包 代码实现: import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; im

  • Java获取汉字拼音的全拼和首拼实现代码分享

    import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; /** * 将汉字转化为全拼 */ public class CnToSpell1 { private static Map<String, Integer> spellMap = null; //存放生僻字和其拼音的Map private static Map<Cha

  • Java汉字转成汉语拼音工具类

    Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuP

  • Java 实现汉字转换为拼音的实例

    Java 实现汉字转换为拼音 转换类 public class PINYINChinese { private static int[] pyvalue = new int[] { -20319, -20317, -20304, -20295, -20292, -20283, -20265, -20257, -20242, -20230, -20051, -20036, -20032, -20026, -20002, -19990, -19986, -19982, -19976, -19805,

  • Java实现将汉字转化为汉语拼音的方法

    本文实例讲述了Java实现将汉字转化为汉语拼音的方法.分享给大家供大家参考,具体如下: 网上乱转,偶然看到一个很有意思的小工具,名字叫pinyin4j,可以把汉字转换为汉语拼音,利用他的话再配合上lucene.中文分词就可以做出类似google那种输入汉语拼音进行全文检索的功能了.实现的代码如下 package pinyin4j; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.forma

  • java中将汉字转换成拼音的实现代码

    一:演示:       如在控制台输入:北京欢迎你 打印出来的拼音:bei jing huan ying ni 二:导入要依赖的jar: 汉字转换拼音jar下载 三:代码编写 复制代码 代码如下: public static String getPinYin(String src) {         char[] t1 = null;         t1 = src.toCharArray();          // System.out.println(t1.length);      

  • java实现汉字转拼音

    一.问题描述 汉字转化为对应的拼音或者获取汉字拼音的首字母,这些都是在开发中经常遇到的问题,在获取汉字的拼音或者拼音的首字母之后,我们在推荐或者搜索部门可以很大程度提高用户的体验,比如用户输入"NH",我们就可以联想出"你好"."你会"."年后"."内涵"等词语.在Java中,pinyin4j.jar这个工具很好实现了将汉字转化为对应的拼音,下面我们就介绍下如何使用这个jar包. 二.资源下载 下载之后解压

  • JAVA实现汉字转拼音功能代码实例

    JAVA中汉字转拼音的方法并不复杂,可以使用pinyin4j包来实现. 一.下载pinyin4j的架包,并导入项目中,如下: 如果是maven项目,maven依赖如下: <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependency> 二.汉字

  • java 根据汉字生成拼音全拼或拼音首字母的示例

    1.情景展示 java 根据中文生成对应的拼音 2.准备工作 所需jar包:pinyin4j-2.5.0.jar 3.解决方案 导包 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.so

  • java汉字转拼音工具类分享

    本文实例为大家分享了java汉字转拼音工具类的具体代码,供大家参考,具体内容如下 import com.google.common.base.Strings; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;

  • Java汉字转拼音pinyin4j用法详解

    一.工具介绍 pinyin4j 是一个支持将简体和繁体中文转换到成拼音的Java开源类库: 1. 功能 支持同一汉字有多个发音 还支持拼音的格式化输出,比如第几声之类的, 同时支持简体中文.繁体中文转换为拼音-使用起来也非常简单.下面是其官方网址,其中提供了下载: pinyin4j的官方下载地址 2. 目录结构及说明 doc : pinyin4j的api文档 lib : pinyin4j的jar包 src: pinyin4j的源代码 CHANGELOG.txt : pinyin4j的版本更新日志

  • Java汉字转拼音类库Pinyin4j详细使用方法与实例

    汉字转拼音类库Pinyin4j一般用法 pinyin4j的使用很方便,一般转换只需要使用PinyinHelper类的静态工具方法即可: String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('刘'); //该类还有其他的拼音转换形式,但是基本上用不到,就不介绍了 返回的数组即是该字符的拼音,如上例就是pinyin[0]=liu2,后面的数字代表声调,声调为5表示轻读,无声调.之所谓返回数组,是因为被判定的汉字有可能有多个读音.如果输入的参

  • Java 汉字获取拼音或首字母工具类代码分析

    本文主要介绍Java中,将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的示例代码. 1.Maven依赖配置(pom.xml) <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.1</version> </dependency> 2.工具类代码

  • Java汉字转拼音案例详解

    一.引入Maven依赖 <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependency> 二.代码 import com.gyyjy.portal.pojo.cms.sm.SelectTreeVO; import net.sourceforge

随机推荐