最近在列表排序上遇到了一个关于中文排序的问题 很自然的百度以后找到了一个工具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