All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.uetty.common.tool.core.PinyinTool Maven / Gradle / Ivy

package com.uetty.common.tool.core;

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;

/**
 * 汉字拼音工具
 * 使用pinyin4j库
 * @author vince
 */
public class PinyinTool {
	
	private static final int HANYU_START = Integer.valueOf("4E00", 16);
	private static final int HANYU_END = Integer.valueOf("9FA5", 16);
	
	/**
	 * 汉字转为小写拼音
	 * @param str 汉字
	 * @return 小写拼音
	 */
	public static String toPinyinString(String str) {
		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		format.setVCharType(HanyuPinyinVCharType.WITH_V);
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (c >= HANYU_START && c <= HANYU_END) {
				try {
					String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c, format);
					sb.append(pinyins[0]);
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 汉字转拼音,带音标
	 * @param str 汉字
	 * @return 小写拼音(带音标)
	 */
	public static String toPinyinWithTone(String str) {
		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
		format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (c >= HANYU_START && c <= HANYU_END) {
				try {
					String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c, format);
					sb.append(pinyins[0]);
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 汉字转为大写拼音首字母
	 * @param name 汉字名
	 * @return 拼音首字母(大写)
	 */
	public static String toPinyinAbbreviation(String name) {
		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		format.setVCharType(HanyuPinyinVCharType.WITH_V);
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < name.length(); i++) {
			char c = name.charAt(i);
			if (c >= HANYU_START && c <= HANYU_END) {
				try {
					String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c, format);
					sb.append(pinyins[0], 0, 1);
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy