首页 > 技术文章 > Java通过pinyin4j实现汉字转拼音

zeng1994 2018-05-09 14:54 原文

   碰到个需求,需要按用户名字的首字母来排序。这就需要获取汉字对应的拼音了,突然就想起了pinyin4j这个jar包,于是就开始写了个汉字转拼音的工具类。在此记录一下,方便后续查阅

一、Pom依赖

		<!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
		<dependency>
		    <groupId>com.belerweb</groupId> 
		    <artifactId>pinyin4j</artifactId>
		    <version>2.5.0</version>
		</dependency>

二、代码

        这个工具类,实现了获取汉字拼音和获取汉字首字母这2个方法
package com.zxy.timecard.utils;
import net.sourceforge.pinyin4j.PinyinHelper;

/**
 * 拼音工具类
 * @author ZENG.XIAO.YAN
 * @date   2018年5月9日
 * 
 */
public class PinYinUtils {
	
	/**
	 * 获取汉字首字母的方法。如: 张三 --> ZS
	 * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
	 * @param hanzi 汉子字符串
	 * @return 大写汉子首字母; 如果都转换失败,那么返回null
	 */
	public static String getHanziInitials(String hanzi) {
		String result = null;
		if(null != hanzi && !"".equals(hanzi)) {
			char[] charArray = hanzi.toCharArray();
			StringBuffer sb = new StringBuffer();
			for (char ch : charArray) {
				// 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
				String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
				if(null != stringArray) {
					sb.append(stringArray[0].charAt(0));
				}
			}
			if(sb.length() > 0) {
				result = sb.toString().toUpperCase();
			}
		} 
		return result;
	}
	
	
	/**
	 * 获取汉字拼音的方法。如: 张三 --> zhangsan 
	 * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
	 * @param hanzi 汉子字符串
	 * @return 汉字拼音; 如果都转换失败,那么返回null
	 */
	public static String getHanziPinYin(String hanzi) {
		String result = null;
		if(null != hanzi && !"".equals(hanzi)) {
			char[] charArray = hanzi.toCharArray();
			StringBuffer sb = new StringBuffer();
			for (char ch : charArray) {
				// 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
				String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
				if(null != stringArray) {
					// 把第几声这个数字给去掉
					sb.append(stringArray[0].replaceAll("\\d", ""));
				}
			}
			if(sb.length() > 0) {
				result = sb.toString();
			}
		} 
		return result;
	}
	
	public static void main(String[] args) {
		System.out.println(PinYinUtils.getHanziInitials("袁素芳"));
		System.out.println(PinYinUtils.getHanziPinYin("袁素芳"));
	}
}

三、小结

    pinyin4j这个jar里面的把功能都封装好了,只需要直接调用就ok;所以工具类写起来比较简单。
    存在的问题: 多音字没处理好,只取了该字的第一个读音
    参考链接:https://blog.csdn.net/anonymousprogrammer/article/details/74276664

    

推荐阅读