- PinyinUtil
PinyinUtil
我们平时会用PinyinUtil去把名字转化为拼音,可是如果字符串中包含在Ascll外的字符,譬如李三(测试)、((测试))王五这个类就束手无策,我在这里稍微改变下,可以保持不会报错
package com.danze.caoa.utils;
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.exception.BadHanyuPinyinOutputFormatCombination;
public class PinyinUtil {
/**
* 根据汉字获取对应的拼音
* @param str
* @return
*/
public static String getPinyin(String str) {
if (str == null) {
return "";
}
// 黑马 -> HEIMA
// 设置输出配置
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
// 设置大写
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
// 设置不需要音调
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
StringBuilder sb = new StringBuilder();
// 获取字符数组
char[] charArray = str.toCharArray();
for (int i = 0; i < charArray.length; i++) {
char c = charArray[i];
// 如果是空格, 跳过当前的循环
if (Character.isWhitespace(c)) {
continue;
}
if (c > 128 || c < -127) {
// 不在这个区间可能是汉字
try {
// 根据字符获取对应的拼音. 黑 -> HEI , 单 -> DAN , SHAN
LogUtils.i("mtg", "哪里错:" + c);
String[] strings = PinyinHelper.toHanyuPinyinStringArray(c, format);
if (strings != null) {
sb.append(strings[0]);//李三(测试) 这种情况
} else {
continue;//((测试))王五 这种情况
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
continue;
}
} else {
// *&$^*@654654LHKHJ
// 不需要转换,Ascll码中有的直接添加
sb.append(c);
}
}
return sb.toString().toUpperCase();
}
}
网友评论