Java通過pinyin4j實現漢字轉拼音


   碰到個需求,需要按用戶名字的首字母來排序。這就需要獲取漢字對應的拼音了,突然就想起了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;所以工具類寫起來比較簡單。
    存在的問題: 多音字沒處理好,只取了該字的第一個讀音

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM