获取汉字首字母(支持多音字)

分享一个自己写的汉字获取首字母的方法

maven依赖

<dependency>
        <groupId>com.belerweb</groupId>
        <artifactId>pinyin4j</artifactId>
        <version>2.5.1</version>
</dependency>

方法如下

/**
     * @author Yaoi
     * @param str 字符串 caseType 大小写枚举
     * @return 数组 toString
     */
    public static String getInitialsOfPinyin(String str, String caseType) {
        String result = null;
        if (null != str && !"".equals(str)) {
            char[] charArray = str.toCharArray();
            List<List<String>> strs = new ArrayList<>();
            for (char ch : charArray) {
                List<String> strItem = new ArrayList<>();
                // 判断是否为汉字
                if (Character.toString(ch).matches("[\\u4E00-\\u9FA5]+")) {
                    // 多音字数组
                    String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
                    if (null != stringArray) {
                        int tempNum = 1;
                        for (int i = 0; i < stringArray.length; i++) {
                            String c = stringArray[i].charAt(0) + "";
                            if (strItem.size() > 0 && !c.equals(strItem.get(i - tempNum))) {
                                strItem.add(stringArray[i].charAt(0) + "");
                                continue;
                            } else if (strItem.size() == 0) {
                                strItem.add(stringArray[0].charAt(0) + "");
                                continue;
                            }
                            tempNum++;
                        }
                    }
                } else {
                    strItem.add(ch + "");
                }
                strs.add(strItem);
            }
            if (strs.size() > 0) {
                List<List<String>> resultList = new ArrayList<>();
                int size = 1;
                for (int i = 0; i < strs.size(); i++) {
                    size *= strs.get(i).size();
                    List<String> tempList = new ArrayList<>();
                    for (int j = 0; j < strs.get(i).size(); j++) {
                        StringBuilder jStr = new StringBuilder(strs.get(i).get(j));
                        if (i - 1 >= 0) {
                            for (int z = 0; z < resultList.get(i - 1).size(); z++) {
                                jStr = new StringBuilder(strs.get(i).get(j));
                                String zStr = resultList.get(i - 1).get(z);
                                jStr.insert(0, zStr);
                                tempList.add(jStr.toString());
                            }
                        } else {
                            tempList.add(jStr.toString());
                        }
                        if (tempList.size() == size) {
                            resultList.add(tempList);
                        }
                    }
                }
                List<String> strings = resultList.get(resultList.size() - 1);
                CaseEnum caseEnum = CaseEnum.fromValue(caseType);
                if (caseEnum != null && caseEnum.getValue().equals(caseType)) {
                    result = strings.stream().map(String::toUpperCase).collect(Collectors.toList()).toString();
                }else {
                    result = strings.toString();
                }
            }
        }
        return result;
    }

大小写枚举代码

package com.test.enums;

/**
 * @author Yaoi
 * @version 1.0
 * @date 2021/5/14 12:47
 */
public enum CaseEnum {
    /**
     * upper 大写
     * lower 小写
     */
    UPPER("upper", "大写"),
    LOWER("lower", "小写");

    String value;
    String desc;

    CaseEnum(String value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    public static CaseEnum fromValue(String value){
        for (CaseEnum sexEnum : CaseEnum.values()) {
            if(sexEnum.value.equals(value)){
                return sexEnum;
            }
        }
        return null;
    }

    public String getValue() {
        return value;
    }

    public String getDesc() {
        return desc;
    }
}

测试


    public static void main(String[] args) {
    	// 利用多音字测试(小写)
    	System.out.println(PinYinUtils.getInitialsOfPinyin("强巷大乐单",""));
    	// 大写
        System.out.println(PinYinUtils.getInitialsOfPinyin("强巷大乐单",CaseEnum.UPPER.getValue()));
    }

程序输出结果截图
程序输出结果

大家有什么疑问可以在评论句交流哈,感谢观看!!
转载请注明出处,谢谢!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值