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



一、Pom依赖




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






6





 



1



<!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->



2



<dependency>





3



<groupId>com.belerweb</groupId>



4



<artifactId>pinyin4j</artifactId>



5



<version>2.5.0</version>



6



</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("袁素芳"));
	}
}






x





 





1



package com.zxy.timecard.utils;



2



import net.sourceforge.pinyin4j.PinyinHelper;



3




4



/**



5



* 拼音工具类



6



* @author ZENG.XIAO.YAN



7



* @date   2018年5月9日



8



*



9



*/



10



public class PinYinUtils {



11





12



/**



13



* 获取汉字首字母的方法。如: 张三 --> ZS



14



* 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案



15



* @param hanzi 汉子字符串



16



* @return 大写汉子首字母; 如果都转换失败,那么返回null



17



*/



18



public static String getHanziInitials(String hanzi) {



19



String result = null;



20



if(null != hanzi && !"".equals(hanzi)) {



21



char[] charArray = hanzi.toCharArray();



22



StringBuffer sb = new StringBuffer();



23



for (char ch : charArray) {



24



// 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)



25



String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);



26



if(null != stringArray) {



27



sb.append(stringArray[0].charAt(0));



28



}



29



}



30



if(sb.length() > 0) {



31



result = sb.toString().toUpperCase();



32



}



33



}



34



return result;



35



}



36





37





38



/**



39



* 获取汉字拼音的方法。如: 张三 --> zhangsan



40



* 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案



41



* @param hanzi 汉子字符串



42



* @return 汉字拼音; 如果都转换失败,那么返回null



43



*/



44



public static String getHanziPinYin(String hanzi) {



45



String result = null;



46



if(null != hanzi && !"".equals(hanzi)) {



47



char[] charArray = hanzi.toCharArray();



48



StringBuffer sb = new StringBuffer();



49



for (char ch : charArray) {



50



// 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)



51



String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);



52



if(null != stringArray) {



53



// 把第几声这个数字给去掉



54



sb.append(stringArray[0].replaceAll("\\d", ""));



55



}



56



}



57



if(sb.length() > 0) {



58



result = sb.toString();



59



}



60



}



61



return result;



62



}



63





64



public static void main(String[] args) {



65



System.out.println(PinYinUtils.getHanziInitials("袁素芳"));



66



System.out.println(PinYinUtils.getHanziPinYin("袁素芳"));



67



}



68



}







三、小结



    pinyin4j这个jar里面的把功能都封装好了,只需要直接调用就ok;所以工具类写起来比较简单。