java中获取中文拼音(全拼)和中文首字母

目录

    • 一、引入依赖
    • 二、代码
    • 三、解释
      • 1、创建格式化对象HanyuPinyinOutputFormat
      • 2、设置输出结果的大小写格式
      • 3、设置声调格式
      • 4、进行汉字转拼音操作
    • 四、作用

一、引入依赖

<!-- 将中文转换为拼音 -->
<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.0</version>
</dependency>

二、代码

/**
 * 获取中文全拼
 *
 * @param name 需要转换的中文
 * @return 全拼结果
 **/
public static String getFullPinyin(String name) {
    // 创建格式化对象
    HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
    //设置大小写格式
    outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    //设置声调格式
    outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    // 放置输入结果
    StringBuilder result = new StringBuilder();
    // 字符数组
    char[] charArray = name.toCharArray();
    // 遍历字符
    for (char c : charArray) {
        // 中文会被变成全拼,非中文会被直接拼接在结果字符串中
        if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
            String[] pinyinArray = new String[0];
            try {
                pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);
            } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                badHanyuPinyinOutputFormatCombination.printStackTrace();
            }
            if (pinyinArray != null) {
                result.append(pinyinArray[0]);
            }
        } else {
            result.append(c);
        }
    }
    return result.toString();
}

/**
 * 获取中文首字母
 *
 * @param name 需要转换的中文
 * @return 首字母结果
 **/
public static String getPinyinInitial(String name) {
    // 创建格式化对象
    HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
    //设置大小写格式
    outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    //设置声调格式
    outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    // 放置输入结果
    StringBuilder result = new StringBuilder();
    // 字符数组
    char[] charArray = name.toCharArray();
    // 遍历字符
    for (char c : charArray) {
        // 中文会被变成拼音首字母,非中文会被直接拼接在结果字符串中
        if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
            String[] pinyinArray = new String[0];
            try {
                pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);
            } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                badHanyuPinyinOutputFormatCombination.printStackTrace();
            }
            if (pinyinArray != null) {
                result.append(pinyinArray[0].charAt(0));
            }
        } else {
            result.append(c);
        }
    }
    return result.toString();
}

三、解释

1、创建格式化对象HanyuPinyinOutputFormat

HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();

2、设置输出结果的大小写格式

outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

括号中的参数有两个选择项,分别是:HanyuPinyinCaseType.LOWERCASE( 转换后以小写方式输出)、HanyuPinyinCaseType.UPPERCASE(转换后以大写方式输出)

3、设置声调格式

outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

括号中的参数有三个选择项,分别是:HanyuPinyinToneType.WITHOUT_TONE(无声调表示,例如:liu)、HanyuPinyinToneType.WITH_TONE_NUMBER(用数字表示声调,例如:liu2)、HanyuPinyinToneType.WITH_TONE_MARK(用声调符号表示,例如:liú)

如果选择HanyuPinyinToneType.WITH_TONE_MARK(用声调符号表示,例如:liú)抓中方式展示,还可以对展示值做进一步的设置,例如:

outputFormat.setVCharType(HanyuPinyinVCharType);
括号中的参数可以有三个选择项,分别是:HanyuPinyinVCharType.WITH_U_UNICODE(以拼音格式表示,例如:以ü表示)、HanyuPinyinVCharType.WITH_U_AND_COLON(以U和一个冒号表示该拼音,例如:lu:)、HanyuPinyinVCharType.WITH_V(以V表示该字符,例如:lv)

4、进行汉字转拼音操作

String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);

数组中只有第一个元素有值,所以只用取出下标为0的结果,记得处理抛出的异常

四、作用

上述两个功能在即时通讯产品中应用比较广泛,比如微信就是一个很好的例子,你可以尝试使用全拼或者首字母组合去微信搜索框中搜索,你会发现你能找到想要的结果,我猜测在用户注册的时候,微信会将用户名称、用户名称全拼、用户名称首字母拼写都存入了数据库或者搜索引擎中

你可能感兴趣的:(java学习之路)