最近在列表排序上遇到了一個關於中文排序的問題 很自然的百度以後找到了一個工具pinyin4j
這裏就pinyin4j的基礎使用筆記一下 其實百度上也能得到類似的結果
首先來看一個HanyuPinyinOutputFormat的類 因爲之後我們在將中文轉化爲拼音的過程中 需要傳入這個參數
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
//設置轉化後字符的大小寫
//HanyuPinyinCaseType.UPPERCASE 轉化爲大寫
//HanyuPinyinCaseType.LOWERCASE 轉化爲小寫
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//設置轉化後音調的表示方式
//HanyuPinyinToneType.WITH_TONE_MARK 帶音調 dǎ
//HanyuPinyinToneType.WITH_TONE_NUMBER 以數字代表音調 da3
//HanyuPinyinToneType.WITHOUT_TONE 不帶音調 da
format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);//不帶聲調
//設置轉化後ü這個輔音的呈現形式
//HanyuPinyinVCharType.WITH_U_AND_COLON 表現爲 u:
//HanyuPinyinVCharType.WITH_U_UNICODE 表現爲 ü
//HanyuPinyinVCharType.WITH_V 表現爲v
format.setVCharType(HanyuPinyinVCharType.WITH_V);//yu這個音的表示方式
如上面看到的 format有3個參數 用於格式化之後顯示的規則
將中文轉化爲拼音的過程 我們會用到PinyinHelper這個類 它擁有一系列的靜態方法 這裏使用最常用的一種
char[] s1Chars=s1.toCharArray();
String s1Result="";//存儲最後的結果
try {
for(int i=0;i<s1Chars.length;i++){
//如果爲中文
if(String.valueOf(s1Chars[i]).matches("[\\u4E00-\\u9FA5]+")){
String[] temp=PinyinHelper.toHanyuPinyinStringArray(s1Chars[i],format);
s1Result+=temp[0];
}else{
s1Result+=String.valueOf(s1Chars[i]);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
要注意的是 如果是中英文混合的情況 需要區分對待 因爲PinyinHelper.toHanyuPinyinStringArray方法如果傳入一個英文字符 會返回null
之所以返回值是一個String數組 是因爲可能有多音字的情況
附上pinyin4j.jar