Java-汉字字符串转拼音,包括首字母和全拼

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29329521/article/details/81302643

 本方法通过pinyin4j这个工具包来实现。

主要流程为先将字符串转换为char[]数组,再循环判断字符是否是汉字,这一步主要使用汉字Unicode编码进行匹配,是汉字则调用pinyin4j中的汉字转拼音接口,不是汉字则不转换,最终将数组遍历完后,把得到的结果拼接,即转换完成。

获取首字母,只需在每次遍历中,取转换结果的首位字符拼接即可。


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;

import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class ChineseUtils {
	
	private static final String CHINESE_PATTERN = "[\u4e00-\u9fa5]"; 
	private static Logger logger = LoggerFactory.getLogger(ChineseUtils.class);
	
	/**
	 * 汉字转换位汉语拼音首字母,英文字符不变
	 * 
	 * @param chinese 汉字
	 * @return 拼音
	 */
	public static String convertChineseToFirstSpell(String chinese) {
		String pinyinName = "";
		char[] nameChar = chinese.toCharArray();
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		for (int i = 0; i < nameChar.length; i++) {
		
			if (Pattern.matches(CHINESE_PATTERN, nameChar[i]+"")) {
				try {
					pinyinName += PinyinHelper.toHanyuPinyinStringArray(
							nameChar[i], defaultFormat)[0].charAt(0);
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					 logger.error("文字转拼音失败"+e);
				}
			} else {
				pinyinName += nameChar[i];
			}
		}
		return pinyinName;
	}
	
	/**
	 * 汉字转换成汉语拼音全拼,英文字符不变
	 * @author you chou
	 * @param chinese 汉字
	 * @return 拼音
	 */
	public static String convertChineseToFullSpell(String chinese) {
		String pinyinName = "";
		char[] nameChar = chinese.toCharArray();
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
		for (int i = 0; i < nameChar.length; i++) {
		
			if (Pattern.matches(CHINESE_PATTERN, nameChar[i]+"")) {
				try {
					pinyinName += PinyinHelper.toHanyuPinyinStringArray(
							nameChar[i], defaultFormat)[0];
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					logger.error("文字转拼音失败"+e);
				}
			} else {
				pinyinName += nameChar[i];
			}
		}
		return pinyinName;
	}
	
	public static void main(String[] args) {
		System.out.println(convertChineseToFirstSpell("123qw广东省深圳市"));
		System.out.println(convertChineseToFullSpell("123qw广东省深圳市"));
	}
}

猜你喜欢

转载自blog.csdn.net/qq_29329521/article/details/81302643