`
xiaoxin5230
  • 浏览: 89220 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

汉语转拼音之pinyin4j

    博客分类:
  • j2ee
阅读更多
      汉字转成拼音如果自己实现起来有点麻烦,主要是怕有些汉字转不了,所以就准备使用一个开源的工具Pinyin4j.
      pinyin4j是一个支持将中文转换到拼音的Java开源类库,pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。pinyin4j的主页:http://pinyin4j.sourceforge.net/
      1. 支持简体中文和繁体中文字符;
      2. 支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字;
      3. 支持多音字,即可以获取一个中文字符的多种发音;
      4. 支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 "ˉ",阳平"ˊ",上声"ˇ",去声"ˋ")的输出。

    为了方便大家使用,我将源文件和jar包一并放上来了,欢迎大家下载。
     废话少说,下面是我建立的一个通用类,有什么不足的地方希望大家指正。
package com.xyj.com.tool.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.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * @className:PinyingUtil.java
 * @classDescription:拼音操作工具类
 * @author:xiayingjie
 * @createTime:2010-10-21
 */

public class PinyingUtil {

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

	/**
	 * 将字符串转换成拼音数组
	 * 
	 * @param src
	 * @param isPolyphone
	 *            是否查出多音字的所有拼音
	 * @param separator
	 *            多音字拼音之间的分隔符
	 * @return
	 */
	public static 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 static 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();

	}

	
	public static String hanziToPinyin(String hanzi){
		return hanziToPinyin(hanzi," ");
	}
	/**
	 * 将汉字转换成拼音
	 * @param hanzi
	 * @param separator
	 * @return
	 */
	public static 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) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
			return pinyingStr;
	}
	/**
	 * 将字符串数组转换成字符串
	 * @param str 
	 * @param separator 各个字符串之间的分隔符
	 * @return
	 */
	public static 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
	 * @return
	 */
	public  static String stringArrayToString(String[] str){
		return stringArrayToString(str,"");
	}
	/**
	 * 将字符数组转换成字符串
	 * @param str 
	 * @param separator 各个字符串之间的分隔符
	 * @return
	 */
	public static 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 str 
	 * @return
	 */
	public static String charArrayToString(char[] ch) {
		return charArrayToString(ch," ");
	}

	/**
	 * 取汉字的首字母
	 * @param src
	 * @param isCapital 是否是大写
	 * @return
	 */
	public static 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
	 * @return
	 */
	public static char[]  getHeadByChar(char src){
		return getHeadByChar(src,true);
	}
	/**
	 * 查找字符串首字母
	 * @param src 
	 * @return
	 */
	public  static String[] getHeadByString(String src){
		return getHeadByString( src, true);
	}
	/**
	 * 查找字符串首字母
	 * @param src 
	 * @param isCapital 是否大写
	 * @return
	 */
	public  static String[] getHeadByString(String src,boolean isCapital){
		return getHeadByString( src, isCapital,null);
	}
	/**
	 * 查找字符串首字母
	 * @param src 
	 * @param isCapital 是否大写
	 * @param separator 分隔符
	 * @return
	 */
	public  static 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;
	}
	
	public static void main(String[] args) {
		System.out.println(stringArrayToString(getHeadByString("我se 心")));
	}

}

分享到:
评论
13 楼 xiaoxin5230 2010-10-23  
yhfghj 写道
楼主,拼音 的 拼音 是 pinyin 。。。。
东西不错,先收下了,一年前要看到这帖子就好了,当时在做一个项目,刚好用到 汉字转拼音

唉,拼音没学好,见笑了。。
12 楼 yhfghj 2010-10-23  
有问题啊
public static void main(String[] args) { 
        System.out.println(stringArrayToString(getHeadByString("我的心肝"))); 
    }
运行的结果是 WDSG
X 和 S 分错了,我用的是 pinyin4j-2.5.0.zip 包,不是这个版本有问题吧!
11 楼 Leon.Wood 2010-10-23  
成 拼英4J 了..........
10 楼 yhfghj 2010-10-23  
楼主,拼音 的 拼音 是 pinyin 。。。。
东西不错,先收下了,一年前要看到这帖子就好了,当时在做一个项目,刚好用到 汉字转拼音
9 楼 kettas 2010-10-23  
能用在哪些文字中,一些特殊的汉字不知道能不能用。
8 楼 JE帐号 2010-10-23  
可惜是GPL协议啊... 只能自己玩了
7 楼 xiaoxin5230 2010-10-22  
bjsuo 写道
多音字能识别吗

多音字可以识别。
6 楼 bjsuo 2010-10-22  
多音字能识别吗
5 楼 晨夕0599 2010-10-22  
好东西,正好需要用到
4 楼 cheng888qi 2010-10-22  
谢谢分享
3 楼 iehyou 2010-10-22  
原来在做机顶盒查询用过。  不可能像电脑一样全部输入的
2 楼 slaser 2010-10-22  
godtiger 写道
这个一般在什么地方用呢?

汉字按拼音排序的时候。
1 楼 godtiger 2010-10-22  
这个一般在什么地方用呢?

相关推荐

    汉语转拼音之pinyin4j 通用类

    总之,"汉语转拼音之pinyin4j 通用类" 是Java开发中处理汉字到拼音转换的一个强大工具,它提供了丰富的功能,易于集成,并能适应各种复杂的中文处理需求。无论是初学者还是经验丰富的开发者,都可以从中受益,提高...

    汉字转拼音库pinyin4j

    总结来说,pinyin4j是一个强大的汉字转拼音工具,它简化了Java程序员处理汉字拼音的需求。配合Sparta库,可以更全面地解决中文字符的处理问题。在开发过程中,合理利用这些库,可以提高代码的可读性和维护性,同时...

    汉字转拼音java pinyin4j-2.5.0.jar

    `pinyin4j-2.5.0.jar`是一个专门为Java设计的库,专门用于将汉字转换为拼音,且支持声调标记,极大地提高了处理效率和准确性。在这个库的帮助下,开发者无需关心复杂的汉字到拼音的映射规则,只需简单调用API即可...

    汉语转换成拼音的jar包pinyin4j-2.5.0版本

    `pinyin4j`库的使用并不复杂,但它的功能强大,可以满足大部分汉语转拼音的需求。在处理大量汉字文本时,`pinyin4j`的高效性能和准确度使得它成为Java开发者的首选工具。无论是进行文本分析,还是创建具有拼音功能的...

    pinyin4j的简化版 汉字转成拼音

    《汉字转拼音:pinyin4j的简化版详解》 在中文信息处理领域,将汉字转化为拼音是一项基础且重要的任务,广泛应用于搜索引擎、输入法、语音识别等多个场景。pinyin4j是一个广受欢迎的Java库,它提供了高效、便捷的...

    汉字转拼音大小写全拼首字母pinyin4j-jar

    《汉字转拼音:pinyin4j-jar工具详解》 在信息技术领域,处理中文字符时,经常需要将汉字转换为拼音,以便进行各种文本处理任务,如搜索、语音合成等。pinyin4j是一个广泛使用的Java库,专门用于实现这个功能。本文...

    pinyin4j-2.5.0.jar 下载 java汉字转拼音 jar包 附带超级简单小dome

    《pinyin4j-2.5.0.jar:Java实现汉字转拼音的高效工具》 在信息化时代,处理中文字符成为许多开发者的必备技能。在Java编程语言中,pinyin4j是一个非常实用的库,它能将汉字转换为拼音,从而解决了在处理汉字排序、...

    汉字转拼音类(内含pinyin4j-2.5.0.jar)

    "汉字转拼音类(内含pinyin4j-2.5.0.jar)" 提供了一个方便的解决方案。这个压缩包包含了一个预封装好的Java类,专门用于实现汉字到拼音的转换,并且依赖于pinyin4j库,版本号为2.5.0。 pinyin4j是一个开源的Java库...

    中文转拼音工具类,pinyin4j-2.5.0.jar 适用于地址人名

    《中文转拼音工具类——pinyin4j-2.5.0.jar 在处理地址与人名中的应用》 在处理中文数据时,有时我们需要将汉字转换为拼音,以便进行搜索、排序或者国际化处理。这时,一个高效且准确的中文转拼音工具显得尤为重要...

    pinyin4j.zip pinyin4j.jar

    《Pinyin4j:汉字拼音处理的利器》 在信息技术高速发展的今天,中文与英文的交互日益频繁,尤其是在编程和数据分析领域,将汉字转化为拼音的需求日益凸显。Pinyin4j便是一个专门解决这一问题的强大工具,它是一个...

    Java 汉字转拼音代码 pinyin4j-2.5.0.jar 下载

    完整的汉字转拼音代码,可以转多种类型,转全拼音或者转第一个字为全拼音,后面取首字母和Jar包

    pinyin4j最新jar包,汉字转pinyin必备

    《pinyin4j:汉字转拼音的利器》 在处理汉字到拼音转换的场景中,pinyin4j是一个不可或缺的工具。它是一个Java库,专为处理汉字转换为拼音而设计,尤其适用于需要进行中文信息处理、搜索引擎优化、或者任何需要汉字...

    中文转拼音:pinyin4j-2.5.0包及实例

    `pinyin4j`是一个强大的Java库,专门用于将汉字转换为对应的汉语拼音。这个`pinyin4j-2.5.0`包提供了全面的API,使得开发人员可以方便地在Java应用程序中实现这一功能。 `pinyin4j`库由Barry DeZeng开发,它的主要...

    pinyin4j 开发jar包

    总之,pinyin4j作为一款强大的Java库,为处理汉字拼音问题提供了高效且灵活的解决方案。无论是简单的汉字转换还是复杂的多音字处理,它都能游刃有余,为开发者的工作带来了极大的便利。掌握并合理利用pinyin4j,可以...

    java拼音搜索pinyin4j

    总的来说,"java拼音搜索pinyin4j"这个项目结合了Java Web开发的基础知识和汉字拼音处理的专业工具,通过Servlet三层架构实现了一个高效的中文搜索功能。开发者可以在这个基础上进一步扩展,如增加拼音排序、语音...

    中文转拼音库 pinyin4j.7z

    pinyin4j库的核心功能在于将汉字转换为其对应的汉语拼音,包括声母、韵母、声调等信息。这个库不仅支持基本的汉字转拼音,还能处理多音字、异体字等问题,对于开发者来说,提供了方便快捷的API接口,大大简化了开发...

    汉字转拼音jar包_pinyin4j(java)

    在IT行业中,尤其是在Java和Android开发领域,有时候我们需要将汉字转换为对应的拼音,以便进行文本处理、搜索引擎优化或语音合成等任务。...在项目中集成`pinyin4j`,可以大大简化处理汉字拼音的工作,提高开发效率。

    pinyin4j jar包

    1. **汉字转拼音**:pinyin4j可以将单个汉字或字符串中的所有汉字转化为对应的拼音。它支持多种输出格式,如全拼、简拼、声母、韵母等。此外,它还能处理多音字,根据上下文提供最合适的读音。 2. **声调处理**:...

    java安卓android汉字转拼音中文转拼音pinyin4j简化精简版

    java安卓android汉字转拼音中文转拼音pinyin4j简化精简版. 网上流传的有180KB,太大了,对于android开发来说。我精简了很多无关内容,收录常用汉字大约2万个,完全够用了,还专门写了一个helper类,直接调用这个...

    中文转拼音库 pinyin4j

    pinyin4j 是一个专门为Java开发的开源库,其主要功能是将中文字符转换为对应的汉语拼音。在处理中文数据时,尤其是在进行文本检索、语音合成或者数据分析等场景下,这个库非常实用。pinyin4j 能够帮助开发者快速地将...

Global site tag (gtag.js) - Google Analytics