首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 漢字轉拼音實戰:基於 pinyin4j 庫完整實現

     編輯:Java 程式設計入門

效果展示

輸入:北京歡迎你
輸出:bei jing huan ying ni

依賴準備

Maven 專案加入 pinyin4j 依賴:



    com.belerweb
    pinyin4j
    2.5.0

或手動下載 pinyin4j-2.5.0.jar 加入 classpath。

核心工具類實現


import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class PinyinUtil {
    
    /**
     * 漢字轉拼音(小寫、無聲調、ü 用 v 表示)
     * @param src 來源字串
     * @return 拼音字串,以空格分隔
     */
    public static String getPinYin(String src) {
        if (src == null || src.isEmpty()) return "";
        
        char[] chars = src.toCharArray();
        String[] pinyinArr = new String[chars.length];
        
        // 設定輸出格式
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);      // 小寫
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);   // 無聲調
        format.setVCharType(HanyuPinyinVCharType.WITH_V);       // ü → v
        
        StringBuilder result = new StringBuilder();
        
        try {
            for (int i = 0; i < chars.length; i++) {
                char ch = chars[i];
                String chStr = Character.toString(ch);
                
                // 判斷是否為漢字(CJK 統一表意文字基本區)
                if (chStr.matches("[\\u4E00-\\u9FA5]+")) {
                    // 取得所有讀音(多音字),取第一個
                    pinyinArr = PinyinHelper.toHanyuPinyinStringArray(ch, format);
                    if (pinyinArr != null && pinyinArr.length > 0) {
                        result.append(pinyinArr[0]).append(" ");
                    }
                } else {
                    // 非漢字原樣保留(不加空格)
                    result.append(ch);
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
        
        return result.toString().trim(); // 去除尾部空格
    }
}

關鍵點解析

設定項選項效果
CaseTypeLOWERCASE / UPPERCASE小寫 / 大寫
ToneTypeWITHOUT_TONE / WITH_TONE_NUMBER / WITH_TONE_MARK無聲調 / 數字聲調 / 符號聲調
VCharTypeWITH_V / WITH_U_AND_COLON / WITH_U_UNICODEü→v / ü→u: / ü→ü

多音字處理說明

PinyinHelper.toHanyuPinyinStringArray() 回傳該字所有可能讀音的陣列。範例程式直接取 [0](最常用讀音)。生產環境若需精確,可結合詞典或上下文消歧。

擴展應用場景

  • 中文排序:按拼音首字母排序
  • 搜尋提示:輸入拼音匹配漢字
  • 檔案命名:中文檔名轉 ASCII 安全字元
  • 首字母縮寫:getFirstLetters("北京") → "bj"

首字母縮寫擴展方法


public static String getFirstLetters(String src) {
    String pinyin = getPinYin(src);
    StringBuilder sb = new StringBuilder();
    for (String part : pinyin.split(" ")) {
        if (!part.isEmpty()) sb.append(part.charAt(0));
    }
    return sb.toString();
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved