汉字转拼音工具

/ 0评 / 0

前言

在网上百度一下可以找到很多的实现,不过我这里介绍一个pinyin4j-2.5.0.jar,这个类库可以将汉字转换为待音标的以及可以将多音字转换为拼音,具体关于它的基本用法由于网上是在是汗牛充栋了,我也就不在继续介绍了,下面给出的是我根据自己的需求自己封装的常用方法,对应jar包下载请参看下面下载链接。

Jar包下载 : 360云盘  访问密码 42b4

封装pinyin4j-2.5.0

首先贴出具体代码,如果在网上看了pinyin4j-2.5.0的用法的可以很简单看懂。

package com.jay.util;
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;

public class HanZi2PinYin {

	// 转换格式, 小写,大写,首字母大写
	public static enum Type {
		LOWERCASE, UPPERCASE, FITST_UPPERCASE
	};

	/**
	 * 将汉字转换为全拼,默认为首字母大写
	 * 
	 * @param src
	 *            源字符串
	 * 
	 * @return 转换后的字符串
	 */
	public static String getPinYin(String src) {
		return getPinYin(src, Type.FITST_UPPERCASE);
	}

	/**
	 * 将汉字按照指定格式转换为拼音
	 * 
	 * @param src
	 *            源字符串
	 * 
	 * @param type
	 *            转换的格式
	 * 
	 * @return 转换后的字符串
	 */
	public static String getPinYin(String src, Type type) {
		char[] charArray = src.toCharArray();
		String[] t2 = new String[charArray.length];
		// 设置汉字拼音输出的格式
		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		if (type == Type.UPPERCASE)
			format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
		else
			format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		format.setVCharType(HanyuPinyinVCharType.WITH_V);
		String result = "";
		try {
			for (int i = 0; i < charArray.length; i++) {
				// 判断是否为汉字字符
				if (Character.toString(charArray[i]).matches(
						"[\\u4E00-\\u9FA5]+")) {
					t2 = PinyinHelper.toHanyuPinyinStringArray(charArray[i],
							format);// 将汉字的几种全拼都存到t2数组中

					char[] tt = t2[0].toCharArray();
					if (type == Type.FITST_UPPERCASE)
						tt[0] -= 32;
					result += String.valueOf(tt);// 取出该汉字全拼的第一种读音并连接到字符串t4后

				} else {
					// 如果不是汉字字符,间接取出字符并连接到字符串t4后
					result += Character.toString(charArray[i]);
				}
			}
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 提取每个汉字的首字母
	 * 
	 * @param str
	 *            带转换的字符串
	 * 
	 * @return String 转换后的字符串
	 */
	public static String getPinYinHeadChar(String str) {
		String convert = "";
		for (int j = 0; j < str.length(); j++) {
			char word = str.charAt(j);
			// 提取汉字的首字母
			String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
			if (pinyinArray != null) {
				convert += pinyinArray[0].charAt(0);
			} else {
				convert += word;
			}
		}
		return convert;
	}

	/**
	 * 将字符串转换成ASCII码
	 * 
	 * @param cnStr
	 *            待转换的字符串
	 * 
	 * @return String 转换以后的字符串
	 */
	public static String getCnASCII(String cnStr) {
		StringBuffer strBuf = new StringBuffer();
		// 将字符串转换成字节序列
		byte[] bGBK = cnStr.getBytes();
		for (int i = 0; i < bGBK.length; i++) {
			// 将每个字符转换成ASCII码
			strBuf.append(Integer.toHexString(bGBK[i] & 0xff));
		}
		return strBuf.toString();
	}
}

下面测试上面贴出的几个方法。

public class Main {
	public static void main(String[] args) throws Exception {
		String str = "这是(222)待转换(adbc)的字符串";
		System.out.println(HanZi2PinYin.getPinYin(str));
		System.out.println(HanZi2PinYin.getPinYin(str,HanZi2PinYin.Type.UPPERCASE));
		System.out.println(HanZi2PinYin.getPinYinHeadChar(str));
	}
}

输出如下,可以看到,正确的进行了转换,并且没有丢弃噪音(()里面的内容)

ZheiShi(222)DaiZhuanHuan(adbc)DeZiFuChuan
ZHEISHI(222)DAIZHUANHUAN(adbc)DEZIFUCHUAN
zs(222)dzh(adbc)dzfc

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注