汉字转拼音工具

  在项目开发中,有时会遇到要将汉字转换为拼音形式,然后再进行处理的业务,方便数据处理等等.

  这里提供一个转换工具类,使用的是pinyin的jar包.实例如下:

=========================第一版=========================

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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Created with IntelliJ IDEA
 * User: Butterfly Killer
 * Date: 2017/3/9 10:39
 * <p>
 * Description: 汉字转拼音工具
 * </p>
 */
public class ChineseToPinyinUtils {

    private static final Logger LOGGER = LoggerFactory.getLogger(ChineseToPinyinUtils.class.getName());

    /**
     * 将汉字转为小写的拼音 [全拼]
     * <p>
     * 例如: "测试",转换结果为 'ceshi'
     * </p>
     *
     * @param chines 汉字
     * @return pinyin 拼音
     */
    public static String toPinyin(String chines) {
        String pinyin = "";
        char[] chinesChar = chines.toCharArray();
        String[] template;
        for (char ch : chinesChar) {
            if (Character.toString(ch).matches("[\\u4E00-\\u9FA5]+")) {
                template = getCharToStringArray(ch);
                pinyin += template[0];
            } else {
                pinyin += Character.toString(ch);
            }
        }
        return pinyin;
    }

    /**
     * 提取汉字的第一个拼音的大写形式字母
     * <p>
     * 例如: "测试" 转换结果为 'CS'
     * </p>
     *
     * @param chines 汉字
     * @return pinyin 首位拼音大写组合
     */
    public static String toFirstCapitalPinyin(String chines) {
        String pinyin = "";
        for (int i = 0; i < chines.length(); i++) {
            char word = chines.charAt(i);
            String[] pinyinArray = getCharToStringArray(word);
            if (null != pinyinArray) {
                pinyin += pinyinArray[0].charAt(0);
            } else {
                pinyin += word;
            }
        }
        return pinyin.toUpperCase();
    }

    /**
     * 将汉字转换为拼音全拼,首字母大写
     * <p>
     * 例如: "测试" 转换结果为 'CeShi'
     * </p>
     *
     * @param chines 汉字
     * @return pinyin
     */
    public static String toStandardPinyin(String chines) {
        String pinyin = "";
        char[] chinesChar = chines.toCharArray();
        for (char cher : chinesChar) {
            String param = String.valueOf(cher);
            // 汉字符判断
            if (param.matches("[\\u4e00-\\u9fa5]")) {
                pinyin += getFirstCharacterUpperCast(cher);
            } else {
                pinyin += param;
            }
        }
        return pinyin;
    }

    /**
     * 将字符串转移为ASCII码
     *
     * @param chines 汉字
     * @return ascII
     */
    public static String toAscII(String chines) {
        String ascII = "";
        byte[] chinesBytes = chines.getBytes();
        for (byte ch : chinesBytes) {
            ascII += Integer.toHexString(ch & 0xff);
        }
        return ascII;
    }

    /**
     * char转为String组
     *
     * @param cher char对象
     * @return String组
     */
    private static String[] getCharToStringArray(char cher) {
        HanyuPinyinOutputFormat hanyuPinyinOutputFormat = new HanyuPinyinOutputFormat();
        hanyuPinyinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 全小写
        hanyuPinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 无音调
        hanyuPinyinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V); // 'ü' 换成 "v"
        String[] words = new String[0];
        try {
            words = PinyinHelper.toHanyuPinyinStringArray(cher, hanyuPinyinOutputFormat);
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            LOGGER.error("BAD HanYu Pinyin Output Format Combination : {}", e.getMessage());
        }
        return words;
    }

    // 将单个汉字转换为首字母大写形式的拼音
    private static String getFirstCharacterUpperCast(char word) {
        String firstUpper = "";
        String[] pinyinArray = getCharToStringArray(word);
        if (null != pinyinArray) {
            char[] pinyinCharacters = pinyinArray[0].toCharArray();
            for (int i = 0; i < pinyinCharacters.length; i++) {
                if (0 == i) {
                    firstUpper += String.valueOf(pinyinCharacters[i]).toUpperCase();
                } else {
                    firstUpper += pinyinCharacters[i];
                }
            }
        }
        return firstUpper;
    }

    public static void main(String[] args) {
        String chine = "生存或者死亡,这是个问题.";
        System.out.println(toStandardPinyin(chine));
    }
}

=========================TODO=========================

posted @ 2017-03-10 16:50  王云十三  阅读(1128)  评论(0)    收藏  举报