- 1 Pinyin4j的简介
- 2 Pinyin4j的使用
- 1 添加maven依赖
- 2 添加汉字转拼音工具类
关于汉字转为拼音的相关实现,通常使用Pinyin4j框架,整理一下Pinyin4j的使用
官方文档:
http://pinyin4j.sourceforge.net/
1 Pinyin4j的简介Pinyin4j 是一个流行的Java开源类库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。
支持功能:
- 支持简体中文和繁体中文字符
- 支持转换到汉语拼音,通用拼音
- 支持多音字,即可以获取一个中文字符的多种发音
- 支持多种字符串输出格式
应用场景:
- 用户输入汉字转拼音
- 数据库中添加姓名的首字母存储
源代码分析:
2 Pinyin4j的使用 1 添加maven依赖
2 添加汉字转拼音工具类com.belerweb pinyin4j 2.5.1
@Slf4j
public class PinYinUtils {
public static void main(String[] args) {
PinYinUtils pinYinUtils = new PinYinUtils();
String str = "唐代诗人李白-libai";
System.out.println(pinYinUtils.toHanyuPinyin(str));
System.out.println(pinYinUtils.getFirstLetter(str));
}
public String toHanyuPinyin(String hanzi) {
char[] chars = hanzi.trim().toCharArray();
String hanyupinyin = "";
//输出格式设置
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// defaultFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK); // 必须设置WITH_U_UNICODE,否则会抛出异常
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
// defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
// 中文的正则表达式
String hanziRegex = "[\u4E00-\u9FA5]+";
try {
for (int i = 0; i < chars.length; i++) {
// 判断为中文,则转换为汉语拼音
if (String.valueOf(chars[i]).matches(hanziRegex)) {
hanyupinyin += PinyinHelper
.toHanyuPinyinStringArray(chars[i], defaultFormat)[0];
} else {
// 不为中文,则不转换
hanyupinyin += chars[i];
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
log.error("字符不能转成汉语拼音");
}
return hanyupinyin;
}
public String getFirstLetter(String hanzi) {
char[] chars = hanzi.trim().toCharArray();
StringBuilder firstPinyin = new StringBuilder();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 拼音大写
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
// 不带声调
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
try {
String str = String.valueOf(chars[0]);
// 中文的正则表达式
String hanziRegex = "[\u4E00-\u9FA5]+";
// 数字表达式
String numberRegex = "[0-9]+";
// 字母表达式
String charRegex = "[a-zA-Z]+";
for (int i = 0, len = chars.length; i < len; i++) {
// 判断为汉字,则转为拼音,并取第一个字母
if (Character.toString(chars[i]).matches("[\u4E00-\u9FA5]+")) {
// 如果是多音字,只取第一个
String[] pys = PinyinHelper.toHanyuPinyinStringArray(chars[i], defaultFormat);
firstPinyin.append(pys[0].charAt(0));
} else {
firstPinyin.append(chars[i]);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
log.error("字符不能转为汉语拼音");
}
return firstPinyin.toString();
}
}



