自学内容网 自学内容网

封装一个获取汉字拼音的小工具,获取汉字拼音、首字母、多个汉字的首字母

前言

其实我们对汉字转拼音的需求还是挺多的,每家公司的场景都不同,例如省市区数据,我们需要根据首字母进行排序,那首先需要获取到首字母才能排序吧,或者我们在做录入人员信息的时候,自动获取名字的拼音等等吧,上述需求我也遇到过,所以封装了下,算是给后面碰到这种需求的伙伴提供一个现成的工具,前人种树,后人乘凉。

引入依赖

当然,我也是通过pinyin4j来实现的,所以最底层的还是人家来做的,lang3包判断

 <dependency>
           <groupId>com.belerweb</groupId>
           <artifactId>pinyin4j</artifactId>
           <version>2.5.1</version>
           <scope>compile</scope>
         </dependency>
         <dependency>
            <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <version>3.12.0</version>
         </dependency>

封装代码

package cn.lwh.common.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;
import org.apache.commons.lang3.StringUtils;

/**
 * @author lwh
 * @date 2024/11/13 
 * @description 拼音处理
 **/
public class PinYinUtils {

    public static void main(String[] args) {
        String firstStr = getFirstStr("商水");
        System.out.println(firstStr);

    }


    /**
     * @author lwh
     * @date 2024/11/13
     * @description 获取首字母,宁夏回族自治区=N,获取到N。传入:宁夏回族自治区,输出:N
     **/
    public static String getFirstStr(String name) {
        if (StringUtils.isNotBlank(name)) {
            String characters = String.valueOf(name.charAt(0));
            if (characters.matches("[\\u4e00-\\u9fa5]")) {
                return String.valueOf(converterToFirstSpell(characters).toUpperCase().charAt(0));
            }
        }
        // name为空或者首位字符不是汉字,都返回空字符串
        return "";
    }

    /**
     * @author lwh
     * @date 2024/11/13
     * @description 北京=beijing=BJ,最终得到BJ。传入:北京,输出:BJ
     **/
    public static String getUpperStr(String name) {
        if (StringUtils.isNotBlank(name)) {
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < name.length(); i++) {
                String characters = String.valueOf(name.charAt(i));
                str.append(converterToFirstSpell(characters).toUpperCase().charAt(0));
            }
            return str.toString();
        }
        return "";
    }

    /**
     * @author lwh
     * @date 2024/11/13
     * @description 传入:商水 输出:shangshui
     **/
    public static String converterToFirstSpell(String str) {
        StringBuilder pinyinName = new StringBuilder();
        char[] nameChar = str.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (char characters : nameChar) {
            String string = String.valueOf(characters);
            if (string.matches("[\\u4e00-\\u9fa5]")) {
                try {
                    String[] mPinyinArray = PinyinHelper.toHanyuPinyinStringArray(characters, defaultFormat);
                    pinyinName.append(mPinyinArray[0]);
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    throw new RuntimeException("拼音转换异常");
                }
            } else {
                pinyinName.append(characters);
            }
        }
        return pinyinName.toString();
    }

}


原文地址:https://blog.csdn.net/l848168/article/details/143741274

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!