当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

汉字转拼音pinyin4j

发表于: 2011-09-03   作者:白糖_   来源:转载   浏览:
摘要: 以前在项目中遇到汉字转拼音的情况,于是在网上找到了pinyin4j这个工具包,非常有用,别的不说了,直接下代码:   import java.util.HashSet; import java.util.Set; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin

以前在项目中遇到汉字转拼音的情况,于是在网上找到了pinyin4j这个工具包,非常有用,别的不说了,直接下代码:

 

import java.util.HashSet;
import java.util.Set;

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;

/**
 * Description : 
 *              处理汉字和对应拼音转换的工具类 
 */
public class PinYinUtil {
	
	/**
	 * Description :
	 *             传入汉字字符串,拼接成对应的拼音,返回拼音的集合
	 *             注:如果是两个汉字以内则为汉字的全拼,若超过两汉字则为首汉字全拼+后面汉字的首字母
	 */
	public static Set<String> getPinYinSet(String src){
		Set<String> lstResult = new HashSet<String>();
		char[] t1 = null;  //字符串转换成char数组
		t1 = src.toCharArray();
		
		if(t1.length<=2){
			//①迭代汉字
			for(char ch : t1){  
				String s[] = getPinYin(ch);  
				Set<String> lstNew = new HashSet<String>();
				//②迭代每个汉字的拼音数组
				for(String str : s){
					if(lstResult.size()==0){
						lstNew.add(str);
					}else{
						for(String ss : lstResult){
							ss += str;
							lstNew.add(ss);
						}
					}
				}
				lstResult.clear();
				lstResult = lstNew;
			}
		}else{
			int index = 0;
			//①迭代汉字
			for(char ch : t1){
				index = index + 1;
				String s[] = getPinYin(ch);
				if(index>1){
					for (int i = 0; i < s.length; i++) {
						s[i] = s[i].substring(0, 1);
					}
				}
				Set<String> lstNew = new HashSet<String>();
				//②迭代每个汉字的拼音数组
				for(String str : s){
					if(lstResult.size()==0){
						lstNew.add(str);
					}else{
						for(String ss : lstResult){
							ss += str;
							lstNew.add(ss);
						}
					}
				}
				lstResult.clear();
				lstResult = lstNew;
			}
		}
		return lstResult;
	}
	
	
	/**
	 * Description :
	 *             传入汉字字符串,拼接成对应的拼音,返回拼音的集合
	 */
	public static Set<String> getPinYins(String src){
		Set<String> lstResult = new HashSet<String>();
		char[] t1 = null;  //字符串转换成char数组
		t1 = src.toCharArray();
		
		//①迭代汉字
		for(char ch : t1){  
			String s[] = getPinYin(ch);  
			Set<String> lstNew = new HashSet<String>();
			//②迭代每个汉字的拼音数组
			for(String str : s){
				if(lstResult.size()==0){
					lstNew.add(str);
				}else{
					for(String ss : lstResult){
						ss += str;
						lstNew.add(ss);
					}
				}
			}
			lstResult.clear();
			lstResult = lstNew;
		}

		return lstResult;
	}




	/**
	 * Description :
	 *             传入中文汉字,转换出对应拼音
	 *             注:出现同音字,默认选择汉字全拼的第一种读音
	 */
	public static String getPinYin(String src) {
		char[] t1 = null;
		t1 = src.toCharArray();
		String[] t2 = new String[t1.length];

		// 设置汉字拼音输出的格式
		HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
		t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		t3.setVCharType(HanyuPinyinVCharType.WITH_V);
		String t4 = "";
		int t0 = t1.length;
		try {
			for (int i = 0; i < t0; i++) {
				// 判断能否为汉字字符
				// System.out.println(t1[i]);
				if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
					t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中
					t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
				} else {
					// 如果不是汉字字符,间接取出字符并连接到字符串t4后
					t4 += Character.toString(t1[i]);
				}
			}
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return t4;
	}
	
	/**
	 * Description :
	 *             将单个汉字转换成汉语拼音,考虑到同音字问题,返回字符串数组的形式
	 */
	public static String[] getPinYin(char src){
		char[] t1 = {src};
		String[] t2 = new String[t1.length];
		
		// 设置汉字拼音输出的格式
		HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
		t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		t3.setVCharType(HanyuPinyinVCharType.WITH_V);
		
		// 判断能否为汉字字符
		if (Character.toString(t1[0]).matches("[\\u4E00-\\u9FA5]+")) {
			try {
				// 将汉字的几种全拼都存到t2数组中
				t2 = PinyinHelper.toHanyuPinyinStringArray(t1[0], t3);
			} catch (BadHanyuPinyinOutputFormatCombination e) {
				e.printStackTrace();
			}
		} else {
			// 如果不是汉字字符,则把字符直接放入t2数组中
			t2[0] = String.valueOf(src);
		}
		return t2;
	}
	
	/**
	 * Description :
	 *             传入没有多音字的中文汉字,转换出对应拼音
	 *             注:如果传入的中文中有任一同音字都会返回字符串信息:false
	 */
	public static String getNoPolyphone(String src){
		char[] t1 = null;
		t1 = src.toCharArray();
		String[] t2 = new String[t1.length];

		// 设置汉字拼音输出的格式
		HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
		t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		t3.setVCharType(HanyuPinyinVCharType.WITH_V);
		String t4 = "";
		int t0 = t1.length;
		try {
			for (int i = 0; i < t0; i++) {
				// 判断能否为汉字字符
				// System.out.println(t1[i]);
				if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
					t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中
					if(t2.length>1){
						return "false";
					}else{
						t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
					}
				} else {
					// 如果不是汉字字符,间接取出字符并连接到字符串t4后
					t4 += Character.toString(t1[i]);
				}
			}
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return t4;
	}
	
	
}
  附件附带pinyin4j 2.5jar包。

汉字转拼音pinyin4j

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
今天看了一篇博客(http://guyexin-126-com.iteye.com/blog/842954)里说关于pinyin4j的即将汉字转
今天看了一篇博客(http://guyexin-126-com.iteye.com/blog/842954)里说关于pinyin4j的即将汉字转
今天看了一篇博客(http://guyexin-126-com.iteye.com/blog/842954)里说关于pinyin4j的即将汉字转
今天看了一篇博客(http://guyexin-126-com.iteye.com/blog/842954)里说关于pinyin4j的即将汉字转
综合应用小工具,汉字转拼音组件pinyin4j实例。(程序员收藏以备后用) package com.xcu.util; impo
pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.
网上找了很多关于汉字转拼音的方法,很多网友提供了不错的方法,但是很多生僻字都转不出拼音或转错
android源码有汉字转拼音的文件,路径:android_source/packages/providers/ContactsProvider/src/c
实现了取汉字文本首字母、文本对应拼音、以及获取和拼音对应的汉字列表等方法。由于汉字字库大,且
http://www.cnblogs.com/zhuisuo/archive/2011/01/12/1933842.html ------------------------------
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号