pinyin4j使用

最近在列表排序上遇到了一個關於中文排序的問題 很自然的百度以後找到了一個工具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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章