Convert Chinese characters to Pinyin in Java

Jars that need to be imported

<!-- pinyin -->
		<dependency>
		    <groupId>com.belerweb</groupId>
		    <artifactId>pinyin4j</artifactId>
		    <version>2.5.0</version>
		</dependency>

Implement tool class

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 = "";
		//转为 char
		char[] 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 exception
			logger.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 = "";
		//转为 char
		char[] 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 exception
			logger.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 = "";
		//转为 char
		char[] 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 stub
		String 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));
	}

}

Guess you like

Origin blog.csdn.net/u010416069/article/details/134550817