需要引入的jar
<!-- pinyin --><dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>
实现工具类
package com.julong.util;import java.util.regex.Pattern;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;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;/*** 中文转拼音工具类* @author julong* @date 2023年11月22日 上午11:20:30* @desc */
public class PinyinUtils {//日志private static final Logger logger = LoggerFactory.getLogger(PinyinUtils.class);/*** ^[\u2E80-\u9FFF]+$ 匹配所有东亚区的语言* ^[\u4E00-\u9FFF]+$ 匹配简体和繁体* ^[\u4E00-\u9FA5]+$ 匹配简体*/public final static String REGEX="^[\u4E00-\u9FFF]+$";//设置格式public static HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();;public PinyinUtils(){}/*** 汉子转拼音 * @param data 汉子转拼音 * @return han zi huan pin yin* @author julong* @date 2023年11月22日 上午11:21:50* @desc*/public static String convertPinyin(String data){logger.debug("【汉子转拼音工具】-转换拼音输入参数-data:{}",data);if(StringUtils.isBlank(data)){return "";}outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);String newData = "";//转为 charchar[] chars = data.toCharArray();try {//判断是否为汉子for (char c : chars) {if(Pattern.matches(REGEX,String.valueOf(c))){//转码String[] a = PinyinHelper.toHanyuPinyinStringArray(c,outputFormat);newData = newData + a[0] +" ";}else{newData = newData + c + " ";}}} catch (BadHanyuPinyinOutputFormatCombination e) {// TODO: handle exceptionlogger.error("【汉子转拼音工具】-转换拼音出现问题:{}",e);return data;}return newData;}/*** 汉子转拼音 * @param data 汉子转拼音 * @param caseType <code>HanyuPinyinCaseType</code>* @return <p>小写:han zi huan pin yin</p><p>大写:HAN ZI HUAN PIN YIN</p>* @author julong* @date 2023年11月22日 上午11:25:30* @desc*/public static String convertPinyin(String data,HanyuPinyinCaseType caseType){logger.debug("【汉子转拼音工具】-转换拼音输入参数-data:{},caseType:{}",data,caseType.getName());if(StringUtils.isBlank(data)){return "";}outputFormat.setCaseType(caseType);outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);String newData = "";//转为 charchar[] chars = data.toCharArray();try {//判断是否为汉子for (char c : chars) {if(Pattern.matches(REGEX,String.valueOf(c))){//转码String[] a = PinyinHelper.toHanyuPinyinStringArray(c,outputFormat);newData = newData + a[0] +" ";}else{String str = String.valueOf(c);if(caseType.getName().equals(HanyuPinyinCaseType.UPPERCASE.getName())){str = str.toUpperCase();}newData = newData + str + " ";}}} catch (BadHanyuPinyinOutputFormatCombination e) {// TODO: handle exceptionlogger.error("【汉子转拼音工具】-转换拼音出现问题:{}",e);return data;}return newData;}/*** 汉子转拼音首字母* @param data* @return* @author julong* @date 2023年11月22日 上午11:30:28* @desc*/public static String convertPinyinInitials(String data){logger.debug("【汉子转拼音工具】-转换拼音输入参数-data:{}",data);if(StringUtils.isBlank(data)){return "";}String newData = "";//转为 charchar[] chars = data.toCharArray();//判断是否为汉子for (char c : chars) {if(Pattern.matches(REGEX,String.valueOf(c))){//转码String[] a = PinyinHelper.toHanyuPinyinStringArray(c);newData = newData + a[0].charAt(0);}else{//不是汉子newData = newData + c;}}return newData;}public static void main(String[] args) {// TODO Auto-generated method stubString zhongwen = "中文转拼音,pin yin";System.out.println(convertPinyinInitials(zhongwen).toUpperCase());System.out.println(convertPinyin(zhongwen));System.out.println(convertPinyin(zhongwen,HanyuPinyinCaseType.LOWERCASE));System.out.println(convertPinyin(zhongwen,HanyuPinyinCaseType.UPPERCASE));}}