資源簡(jiǎn)介
java準(zhǔn)確讀取多音字的方法。多音字讀取一直都是個(gè)問(wèn)題,筆者搜索了很多方法,結(jié)合這些方法的原理,完成了準(zhǔn)確讀取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?=?“(|?|\\[|\\])“;//?正則表達(dá)式,匹配字符串用
public?static?void?main(String[]?args)?{
String?str?=?“綠色中國(guó)銀行長(zhǎng)沙分行“;
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?““);
}
/**
?*?漢字轉(zhuǎn)拼音?最大匹配優(yōu)先
?*?
?*?@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碼
//?取得當(dāng)前漢字的所有全拼
try?{
String[]?results?=?PinyinHelper.toHanyuPinyinStringArray(
ch?defaultFormat);
if?(results?!=?null)?{?//?非中文
int?len?=?results.length;
if?(len?==?1)?{?//?不是多音字
setValue(results[0]);
}?else?{?//?多音字
//?合并同音不同聲調(diào)(去重)
List?duoyinziPinyins=?new?ArrayList();//?定義一個(gè)空的數(shù)組
for(int?k=0;k if(!duoyinziPinyins.contains(results[k])){
duoyinziPinyins.add(results[k]);
}
}
if(duoyinziPinyins.size()==1){
setValue(duoyinziPinyins.get(0));//?如果新的集合長(zhǎng)度是1,就取第一個(gè)
}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個(gè)漢字?大西洋
if(matchPinyins(pychinese?i?i+3)){
flag?=?setValue(py);
break;
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????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
評(píng)論
共有 條評(píng)論