Java 获取汉字的拼音或汉字首字母
本帖最后由 pengruibin 于 2023-7-31 09:07 编辑项目中有需要将输入的汉字转化为拼音和提取每个汉字首字母的功能,记录分享一下
1、引入pinyin4j的maven依赖
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
2、编写一个拼音处理的工具类
package com.example.mydemo.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.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
/**
* 拼音工具类
*/
public class PinYinUtil {
/**
* 获取汉字串拼音,英文字符不变
* @param chinese 汉字串
* @return 汉语拼音
*/
public static String getFullSpell(String chinese) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr > 128) {
try {
pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr, defaultFormat));
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr);
}
}
return pybf.toString();
}
/**
* 获取汉字串拼音首字母,英文字符不变
* @param chinese 汉字串
* @return 汉语拼音首字母
*/
public static String getFirstSpell(String chinese) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr > 128) {
try {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr, defaultFormat);
if (temp != null) {
pybf.append(temp.charAt(0));
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr);
}
}
return pybf.toString().replaceAll("\\W", "").trim();
}
public static void main(String[] args) {
System.out.println(getFullSpell("吃饭了吗"));
System.out.println(getFirstSpell("吃饭了吗"));
}
}
运行结果
petroyf 发表于 2023-8-3 15:22
是从pinyin4j这个库里获取的常用汉字对应拼音吗?
是的,从pinyin4j依赖库处理的 String不是很好啊,使用String对象进行拼接的话会产生大量的中间对象,造成资源浪费和性能损失。可以使用StringBuilder或StringBuffer 学习了,感谢分享啦 TinaZerotwo 发表于 2023-7-31 10:49
String不是很好啊,使用String对象进行拼接的话会产生大量的中间对象,造成资源浪费和性能损失。可以使用St ...
额…… StringBuffer 用着呢 有用的知识又增加了,感谢楼主分享 {:1_919:}
学习了,感谢分享啦
学习了,收藏一下 很不错哈哈,学习了{:1_927:} 学习了,感谢分享啦 TinaZerotwo 发表于 2023-7-31 10:49
String不是很好啊,使用String对象进行拼接的话会产生大量的中间对象,造成资源浪费和性能损失。可以使用St ...
实际上jvm会自动优化,你放心,我看过字节码文件了,如果你用string进行拼接啥的,编译后自动转成sb的