朕的拼音工具类

  • 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();
    }
}

你可能感兴趣的:(朕的拼音工具类)