資源簡介
java準確讀取多音字的方法。多音字讀取一直都是個問題,筆者搜索了很多方法,結合這些方法的原理,完成了準確讀取Pinyin的幫助方法。

代碼片段和文件信息
package?data.util;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.util.ArrayList;
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;
import?net.sourceforge.pinyin4j.PinyinHelper;
import?net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import?net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import?net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import?net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import?net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public?class?PinyinUtilsPro?{
private?static?Map>?pinyinMap?=?new?HashMap>();
private?static?List?pinyin?=?new?ArrayList();
private?static?List?hpinyin?=?new?ArrayList();
private?static?String?regx?=?“(|?|\\[|\\])“;//?正則表達式,匹配字符串用
public?static?void?main(String[]?args)?{
String?str?=?“綠色中國銀行長沙分行“;
convertChineseToPinyin(str);
String?py?=?getPinyin();
System.out.println(str?+?“?=?“?+?py);
String?headP?=?getHeadPinyin();
System.out.println(headP);
}
public?static?String?getPinyin(){
return?String.valueOf(pinyin).replaceAll(regx?““);
}
public?static?String?getHeadPinyin(){
return?String.valueOf(hpinyin).replaceAll(regx?““);
}
/**
?*?漢字轉拼音?最大匹配優先
?*?
?*?@param?chinese
?*?@return
?*/
public?static?void?convertChineseToPinyin(String?chinese)?{
initPinyin();
HanyuPinyinOutputFormat?defaultFormat?=?new?HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
char[]?arr?=?chinese.toCharArray();
for?(int?i?=?0;?i? char?ch?=?arr[i];
if?(ch?>?128)?{?//?非ASCII碼
//?取得當前漢字的所有全拼
try?{
String[]?results?=?PinyinHelper.toHanyuPinyinStringArray(
ch?defaultFormat);
if?(results?!=?null)?{?//?非中文
int?len?=?results.length;
if?(len?==?1)?{?//?不是多音字
setValue(results[0]);
}?else?{?//?多音字
//?合并同音不同聲調(去重)
List?duoyinziPinyins=?new?ArrayList();//?定義一個空的數組
for(int?k=0;k if(!duoyinziPinyins.contains(results[k])){
duoyinziPinyins.add(results[k]);
}
}
if(duoyinziPinyins.size()==1){
setValue(duoyinziPinyins.get(0));//?如果新的集合長度是1,就取第一個
}else{//?
System.out.println(“多音字:“?+?ch);
int?length?=?chinese.length();
boolean?flag?=?false;
for?(int?x?=?0;?x? String?py?=?duoyinziPinyins.get(x);
if?(i?+?3?<=?length)?{?//?后向匹配2個漢字?大西洋
if(matchPinyins(pychinese?i?i+3)){
flag?=?setValue(py);
break;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????3522??2014-12-02?18:44??多音字.png
?????目錄???????????0??2014-12-02?18:45??lib\
?????文件??????188920??2014-11-26?16:10??lib\pinyin4j-2.5.0.jar
?????目錄???????????0??2014-12-02?18:45??src\
?????目錄???????????0??2014-12-02?18:45??src\data\
?????目錄???????????0??2014-12-02?18:45??src\data\util\
?????文件????????6170??2014-12-02?18:44??src\data\util\PinyinUtilsPro.java
?????文件???????12943??2014-12-02?15:10??src\duoyinzi_dic.txt
評論
共有 條評論