获取中文字符串首字母
# 获取中文字符串首字母
# 依赖
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 工具类
import net.sourceforge.pinyin4j.PinyinHelper;
public class PinyinUtils {
/**
* 获取中文字符串的拼音首字母
*/
public static String getInitial(String chinese) {
if (chinese == null || chinese.length() == 0) {
return "";
}
char firstChar = chinese.charAt(0);
// 判断是否为中文字符
if (Character.toString(firstChar).matches("[\\u4E00-\\u9FA5]+")) {
// 使用 Pinyin4j 将中文转换为拼音数组
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(firstChar);
if (pinyinArray != null && pinyinArray.length > 0) {
// 提取拼音的首字母作为首字母字段的值
return String.valueOf(pinyinArray[0].charAt(0)).toUpperCase();
}
}
// 非中文字符,直接返回首字母的大写形式
return String.valueOf(firstChar).toUpperCase();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Mapper 接口
List<String> getName();
void updateInitial(String name, String initial);
1
2
3
2
3
对应映射文件
<update id="updateInitial">
update t_area_info
set initial = #{initial}
where area_name = #{name}
</update>
<select id="getName" resultType="java.lang.String">
SELECT area_name FROM `t_area_info`;
</select>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 测试方法
@Test
void testGetPinyin() {
List<String> nameList = firmwareFunctionMapper.getName();
HashMap<String, String> map = new HashMap<>();
for (String e : nameList) {
String initial = PinyinUtils.getInitial(e);
map.put(e, initial);
}
System.out.println("===================");
System.out.println("map = " + map);
System.out.println("size = " + map.size());
System.out.println("===================");
for (String name : nameList) {
String initial = map.get(name);
firmwareFunctionMapper.updateInitial(name, initial);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上次更新: 2024/9/25 11:16:13