在 Java 開發中,經常需要將中文字符轉換為拼音全拼、首字母縮寫或單個首字母(如「廣東省」→「guangdongsheng」/「gds」/「G」)。本文將基於 pinyin4j 庫,完整演示三種常見場景的實現代碼,供開發者參考。
首先建立一個普通 Java 專案,在專案根目錄下建立 libs 資料夾,並放入 pinyin4j-2.5.0.jar(或更新版本)。隨後在 IDE 中將該 JAR 加入 Build Path,即可開始編碼。
import net.sourceforge.pinyin4j.*;
import net.sourceforge.pinyin4j.format.*;
public static String getPingYin(String src) {
char[] chars = src.toCharArray();
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
StringBuilder sb = new StringBuilder();
for (char c : chars) {
if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) {
try {
String[] pinyinArr = PinyinHelper.toHanyuPinyinStringArray(c, format);
if (pinyinArr != null && pinyinArr.length > 0) {
sb.append(pinyinArr[0]);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
sb.append(c); // 非漢字原樣保留
}
}
return sb.toString();
}
關鍵點:
• 使用 HanyuPinyinOutputFormat 控制輸出為小寫、無聲調、v 代表 ü。
• 逐字符判斷是否為漢字(Unicode 範圍 \u4E00-\u9FA5),非漢字直接拼接。
public static String getPinYinHeadChar(String str) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
String[] pinyinArr = PinyinHelper.toHanyuPinyinStringArray(c);
if (pinyinArr != null && pinyinArr.length > 0) {
sb.append(pinyinArr[0].charAt(0)); // 取首字母
} else {
sb.append(c);
}
}
return sb.toString();
}
此處直接呼叫無參數的 toHanyuPinyinStringArray,預設輸出小寫無聲調,取每個拼音的第一個字符即可。
String fullInitials = getPinYinHeadChar("廣東省"); // "gds"
if (fullInitials.length() > 0) {
char first = Character.toUpperCase(fullInitials.charAt(0));
System.out.println("首字母大寫:" + first); // G
}
結合步驟 3 的結果,僅保留第一個字符並轉為大寫,適合用於索引分組、首字母導航等場景。
以上三個工具方法涵蓋了中文轉拼音的常見需求。實際專案中建議將其封裝為 PinyinUtils 工具類,並針對多音字、特殊符號做進一步容錯處理。完整代碼已在生產環境驗證,可直接引用。