使用Pinyin4j根据汉字获取对应的拼音【含有jar包】

支持以下功能: 1、获取中文字符串的一组全拼 2、获取中文字符串的一组首字母 3、获取中文字符串的所有全拼组合(包括多音字) 4、获取中文字符串的所有首字母组合(包括多音字) 5、jar...

支持以下功能:

1、获取中文字符串的一组全拼
2、获取中文字符串的一组首字母
3、获取中文字符串的所有全拼组合(包括多音字)
4、获取中文字符串的所有首字母组合(包括多音字)

5、jar 包下载 :点击去下载

import java.util.ArrayList;
import java.util.List;

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;

/**
 * @author dengjihai
 * @create 2017-11-14
 **/
public class PinyinUtil {

    public static void main(String[] strgs) {
        System.out.println(getSingleFullPinyin("邓集海"));
    }

    /**
     * 获取中文字符串的一组全拼
     *
     * @param cnString 中文字符串
     * @return hanyupinyin汉语拼音
     */
    public static String getSingleFullPinyin(String cnString) {
        StringBuilder sb = new StringBuilder();
        char[] arr = cnString.toCharArray();
        for (char c : arr) {
            if (c > 128) {
                try {
                    sb.append(PinyinHelper.toHanyuPinyinStringArray(c, outputFormat)[0]);
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }

    /**
     * 获取中文字符串的一组首字母
     *
     * @param cnString 中文字符串
     * @return hypy汉语拼音
     */
    public static String getSingleFirstPinyin(String cnString) {
        StringBuilder sb = new StringBuilder();
        char[] arr = cnString.toCharArray();
        for (char c : arr) {
            if (c > 128) {
                try {
                    sb.append(PinyinHelper.toHanyuPinyinStringArray(c, outputFormat)[0].charAt(0));
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }

    /**
     * 获取中文字符串的所有全拼组合(包括多音字)
     *
     * @param 中文字符串
     * @return hanyupinyin汉语拼音的List
     */
    public static List<String> getAllFirstPinyin(String cnString) {
        char[] arr = cnString.toCharArray();
        String[][] strings = new String[cnString.length()][];
        for (int i = 0; i < strings.length; i++) {
            if (arr[i] > 128) {
                try {
                    String[] tmpStrings = PinyinHelper.toHanyuPinyinStringArray(arr[i], outputFormat);
                    strings[i] = new String[tmpStrings.length];
                    for (int j = 0; j < tmpStrings.length; j++) {
                        strings[i][j] = tmpStrings[j].substring(0, 1);
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                strings[i] = new String[]{String.valueOf(arr[i])};
            }
        }
        List<String> list = new ArrayList<String>();
        permuteAndCombine(list, strings, 0, 0, "");
        return list;
    }

    /**
     * 获取中文字符串的所有首字母组合(包括多音字)
     *
     * @param 中文字符串
     * @return hypy汉语拼音的List
     */
    public static List<String> getAllFullPinyin(String cnString) {
        char[] arr = cnString.toCharArray();
        String[][] strings = new String[cnString.length()][];
        for (int i = 0; i < strings.length; i++) {
            if (arr[i] > 128) {
                try {
                    strings[i] = PinyinHelper.toHanyuPinyinStringArray(arr[i], outputFormat);
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                strings[i] = new String[]{String.valueOf(arr[i])};
            }
        }
        List<String> list = new ArrayList<String>();
        permuteAndCombine(list, strings, 0, 0, "");
        return list;
    }

    /**
     * 二维数组排列组合
     *
     * @return 结果放到list
     */
    private static void permuteAndCombine(List<String> list, String[][] strings, int i, int j, String before) {
        if (i < strings.length - 1) {
            for (; j < strings[i].length; j++) {
                String after = before + strings[i][j];
                permuteAndCombine(list, strings, i + 1, 0, after);
            }
        } else {
            for (String str : strings[i]) {
                String after = before + str;
                if (!list.contains(after)) {
                    list.add(after);
                }
            }
        }
    }

    /**
     * 定义拼音的输出格式
     */
    private static HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();

    static {
        //默认设置小写
        outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        //默认设置没有音调
        outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        //默认设置显示v
        outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
    }

    public static HanyuPinyinOutputFormat getOutputFormat() {
        return outputFormat;
    }

    public static void setOutputFormat(HanyuPinyinOutputFormat outputFormat) {
        PinyinUtil.outputFormat = outputFormat;
    }
}

  • 发表于 2017-11-14 10:33
  • 阅读 ( 1454 )
  • 分类:Java

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
威猛的小站长

124 篇文章

作家榜 »

  1. 威猛的小站长 124 文章
  2. Jonny 65 文章
  3. 江南烟雨 36 文章
  4. - Nightmare 33 文章
  5. doublechina 31 文章
  6. HJ社区-肖峰 29 文章
  7. 伪摄影 22 文章
  8. Alan 14 文章