Java实战之城市多音字处理
一、需求
对城市名称转化为拼音的时候,当遇到多音字城市的时候,转化拼音就不是我们想要的了。
使用? pinyin4j 无法直接解决这个问题。 。网上有很多维护多音字信息的,觉得麻烦。
如:
长沙====>“zhangsha”
厦门===>“shamen”
重庆===>“zhongqing”
二、导入 jpinyin
版本自选
com.github.stuxuhai
jpinyin
1.1.8
三、直接创建工具类(不需要其他操作)
import com.github.stuxuhai.jpinyin.ChineseHelper;
import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper;
public class ChangeToPinYinJPinYin {
public static String changeToMarkPinYin(String pinYinStr) {
WdjJd String tempStr=null;
try {
tempStr=PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_MARK);
} catch (Exception e) {
e.printStackTrace();
}
return tempStr;
}
public static String changeToNumberPinYin(String pinYinStr) {
String tempStr=null;
try {
tempStr=PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_NUMBER);
} catch (Exception e) {
e.printStackTrace();
}
return tempStr;
}
public static String changeToTonePinYin(String pinYinStr) {
String tempStr=null;
try {
http:// tempStr=PinyinHelper.convertToPinyinString(pinYinStr, "", PinyinFormat.WITHOUT_TONE);
} catch (Exception e) {
e.printStackTrace();
}
return tempStr;
}
public static String changeToGetShortPinYin(String pinYinStr) {
String tempStr=null;
try {
tempStr=PinyinHelper.getShortPinyin(pinYinStr);
} catch (Exception e) {
e.printStackTrace();
}
return tempStr;
}
public static boolean checkPinYin(char pinYinStr) {
boolean check=false;
try {
check=PinyinHelper.hasMultiPinyin(pinYinStr);
} catch (Exception e) {
e.printStackTrace();
}
return check;
}
public static String changeToTraditional(String pinYinStr) {
String tempStr=null;
try {
tempStr=ChineseHelper.convertToTraditionalChinese(pinYinStr);
} catch (Exception e) {
e.printStackTrace();
}
return tempStr;
}
public static String changeToSimplified(String pinYinSt) {
String tempStr=null;
try {
tempStr=ChineseHelper.convertToSimplifiedChinese(pinYinSt);
} catch (Exception e) {
e.printStackTrace();
}
return tempStr;
}
}
四、直接测试代码
public static void main(String[] args) {
String str="长沙市";
System.out.println("转换为有声调的拼音字符串:"+changeToMarkPinYin(str));
System.out.println("转换为不带音调的拼音字符串:"+changeToTonePinYin(str));
String strFanTi="誰是程序員";
System.out.println("繁体转换为简体:"+changeToSimplified(strFanTi));
System.out.println("重"+"重是否是多音字:"+checkPinYin('重'));
System.out.println("厦"+"是否是多音字:"+checkPinYin('厦'));
System.out.println("鼠"+"是否是多音字:"+checkPinYin('鼠'));
}
输出结果,下面不同字的中间是否有空格,这个可以自己设置的
五、源码分析
5.1 字典对应信息
分别是:从上到下分别是
1.繁体-简体对应表
2.多音字
3.带音标的拼音
5.2 6个处理类
5.3 处理模式
点开
com.github.stuxuhai.jpinyin.PinyinResource#getPinyinResource
有三个方法分别加载了这几个资源
然后通过
com.github.stuxuhai.jpinyin.ChineseHelper
通过一个键值对获取。加载处理而已。