需求:获取中文首字母当做用户登录名。获取用户姓名拼音做其他逻辑。不需要定制化使用hutool封装的PinyinUtil即可,我这里需要自己定制,所以写了个工具类。实现基于搜狐的 Pinyin4j库。
依赖:
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.2</version>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
PinyinUtils代码示例
PinyinUtils 提供了以下主要方法:toHanYuPinyinString(String str)
:将字符串转换为汉语拼音,去掉声调。getFirstLetters(String chineseString)
:获取中文拼音的首字母。getPinyin(String str, String separator)
:获取中文拼音,可以指定拼音之间的分隔符。
import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import lombok.experimental.UtilityClass;
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;
/**
* 拼音工具类
*
*/
@UtilityClass
public class PinyinUtils {
private final HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
static {
outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
}
/**
* 汉语转拼音
* @param str
* @return
*/
public String toHanYuPinyinString(String str) {
try {
return PinyinHelper.toHanYuPinyinString(str, outputFormat, "", false);
} catch (BadHanyuPinyinOutputFormatCombination e) {
return null;
}
}
/**
* 获取中文拼音首字母
* @param chineseString
* @return
*/
public String getFirstLetters(String chineseString) {
if (chineseString == null || chineseString.trim().isEmpty()) {
return null;
}
StringBuilder firstLetters = new StringBuilder();
for (char ch : chineseString.toCharArray()) {
String pinyin = getPinyin(String.valueOf(ch), "");
if (!pinyin.isEmpty()) {
// 获取并添加首字母
firstLetters.append(pinyin.charAt(0));
} else {
// 对于无法转换为拼音的字符(例如数字、英文等),直接添加
firstLetters.append(ch);
}
}
return firstLetters.toString();
}
/**
* 获取中文拼音
* @param str
* @param separator
* @return
*/
public String getPinyin(String str,String separator) {
StrBuilder result = StrUtil.strBuilder();
boolean isFirst = true;
int strLen = str.length();
try {
for(int i = 0; i < strLen; ++i) {
if (isFirst) {
isFirst = false;
} else {
result.append(separator);
}
String[] pinyinStringArray = PinyinHelper.toHanyuPinyinStringArray(str.charAt(i), outputFormat);
if (ArrayUtil.isEmpty(pinyinStringArray)) {
result.append(str.charAt(i));
} else {
result.append(pinyinStringArray[0]);
}
}
} catch (BadHanyuPinyinOutputFormatCombination var8) {
throw new CheckedException(var8);
}
return result.toString();
}
public static void main(String[] args) {
String pinyin = toHanYuPinyinString("这是一个测试");
System.out.println(pinyin);
String pinyinWithSep = getPinyin("这是一个测试","_");
System.out.println(pinyinWithSep);
String firstLetters = getFirstLetters("这是一个测试");
System.out.println(firstLetters);
}
}
运行结果:
zheshiyigeceshi
zhe_shi_yi_ge_ce_shi
zsygcs
不管是信神,还是自珍自重,人活在世界上总得有点信念才成。–王小波