分享一个自己写的汉字获取首字母的方法
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()));
}
程序输出结果截图
大家有什么疑问可以在评论句交流哈,感谢观看!!
转载请注明出处,谢谢!!