Pinyin4j

java汉字转拼音操作工具类

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.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * java汉字转拼音操作工具类
 * @author admin
 */
public class PinyinUtil {

	/**
	 * 将字符串转换成拼音数组
	 * @param src
	 * @return
	 */
	public String[] stringToPinyin(String src, String separator) {

		return stringToPinyin(src, true, separator);

	}

	/**
	 * 将字符串转换成拼音数组
	 * @param src
	 * @param isPolyphone
	 *            是否查出多音字的所有拼音
	 * @param separator
	 *            多音字拼音之间的分隔符
	 * @return
	 */
	public String[] stringToPinyin(String src, boolean isPolyphone, String separator) {

		// 判断字符串是否为空
		if ("".equals(src) || null == src) {

			return null;

		}

		char[] srcChar = src.toCharArray();

		int srcCount = srcChar.length;

		String[] srcStr = new String[srcCount];

		for (int i = 0; i < srcCount; i++) {

			srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);

		}

		return srcStr;
	}

	/**
	 * 将单个字符转换成拼音
	 * @param src
	 * @return
	 */
	public String charToPinyin(char src, boolean isPolyphone, String separator) {

		// 创建汉语拼音处理类
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();

		// 输出设置,大小写,音标方式
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

		StringBuffer tempPinying = new StringBuffer();

		// 如果是中文
		if (src > 128) {

			try {

				// 转换得出结果
				String[] strs = PinyinHelper.toHanyuPinyinStringArray(src, defaultFormat);

				// 是否查出多音字,默认是查出多音字的第一个字符
				if (isPolyphone && null != separator) {
					
					for (int i = 0; i < strs.length; i++) {
						
						tempPinying.append(strs[i]);
						
						if (strs.length != (i + 1)) {
							
							// 多音字之间用特殊符号间隔起来
							tempPinying.append(separator);
							
						}
						
					}
					
				}
				
				else {
					
					tempPinying.append(strs[0]);
					
				}

			} catch (BadHanyuPinyinOutputFormatCombination e) {
				
				e.printStackTrace();
				
			}
			
		}
		
		else {
			
			tempPinying.append(src);
			
		}

		return tempPinying.toString();

	}

	/**
	 * 将汉字转换成拼音
	 * @param hanzi
	 * @param separator
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public String hanziToPinyin(String hanzi, String separator) {

		// 创建汉语拼音处理类
		HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
		
		// 输出设置,大小写,音标方式
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

		String pinyingStr = "";
		
		try {
			
			pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, separator);
			
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			
			e.printStackTrace();
			
		}
		
		return pinyingStr;
		
	}

	/**
	 * 将字符串数组转换成字符串
	 * @param str
	 * @param separator
	 *            各个字符串之间的分隔符
	 * @return
	 */
	public String stringArrayToString(String[] str, String separator) {

		StringBuffer sb = new StringBuffer();
		
		for (int i = 0; i < str.length; i++) {
			
			sb.append(str[i]);
			
			if (str.length != (i + 1)) {
				
				sb.append(separator);
				
			}
			
		}
		
		return sb.toString();
	}

	/**
	 * 将字符数组转换成字符串
	 * @param str
	 * @param separator
	 *            各个字符串之间的分隔符
	 * @return
	 */
	public String charArrayToString(char[] ch, String separator) {

		StringBuffer sb = new StringBuffer();
		
		for (int i = 0; i < ch.length; i++) {
			
			sb.append(ch[i]);
			
			if (ch.length != (i + 1)) {
				
				sb.append(separator);
				
			}
			
		}
		
		return sb.toString();
	}

	/**
	 * 取汉字的首字母
	 * @param src
	 * @param isCapital
	 *            是否是大写
	 * @return
	 */
	public char[] getHeadByChar(char src, boolean isCapital) {

		// 如果不是汉字直接返回
		if (src <= 128) {
			
			return new char[] { src };
			
		}
		// 获取所有的拼音
		String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);
		
		// 创建返回对象
		int polyphoneSize = pinyingStr.length;
		
		char[] headChars = new char[polyphoneSize];
		
		int i = 0;
		
		// 截取首字符
		for (String s : pinyingStr) {
			
			char headChar = s.charAt(0);
			
			// 首字母是否大写,默认是小写
			if (isCapital) {
				
				headChars[i] = Character.toUpperCase(headChar);
				
			}
			
			else {
				
				headChars[i] = headChar;
				
			}
			
			i++;
			
		}

		return headChars;
	}

	/**
	 * 查找字符串首字母
	 * @param src
	 * @param isCapital
	 *            是否大写
	 * @return
	 */
	public String[] getHeadByString(String src, boolean isCapital) {

		return getHeadByString(src, isCapital, null);
	}

	/**
	 * 查找字符串首字母
	 * @param src
	 * @param isCapital
	 *            是否大写
	 * @param separator
	 *            分隔符
	 * @return
	 */
	public String[] getHeadByString(String src, boolean isCapital, String separator) {

		char[] chars = src.toCharArray();
		
		String[] headString = new String[chars.length];
		
		int i = 0;
		
		for (char ch : chars) {

			char[] chs = getHeadByChar(ch, isCapital);
			
			StringBuffer sb = new StringBuffer();
			
			if (null != separator) {
				
				int j = 1;

				for (char ch1 : chs) {
					
					sb.append(ch1);
					
					if (j != chs.length) {
						
						sb.append(separator);
						
					}
					
					j++;
					
				}
				
			}
			
			else {
				
				sb.append(chs[0]);
				
			}
			
			headString[i] = sb.toString();
			
			i++;
		}
		
		return headString;
	}
}

 你可以这么用:

PinyinUtil putil = new PinyinUtil();
String[] result = putil.getHeadByString("拼音工具类", true);
StringBuffer sb = new StringBuffer();
 for (String str : result) {
	sb.append(str);
}
System.out.println(sb.toString());

 附件是Pinyin4j-2.5.0.jar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值