需要引入的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));}}