`

pinyin4j 中文转成拼音(支持多音字输出)

 
阅读更多

最近要做一个中文转为拼音,于是联想到 pinyin4j,网络上很多资料,可是不全,整理一下中文转成拼音(支持多音字输出)

详细代码:

 

package com.baison.util;

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;

/*******************************************************************************
 * pinyin4j is a plug-in, you can kind of Chinese characters into phonetic.Multi-tone character,Tone
 * Detailed view http://pinyin4j.sourceforge.net/
 * 
 * @author Administrator
 * @ClassName: Pinyin4jUtil
 * @Description: TODO
 * @author wang_china@foxmail.com
 * @date Jan 13, 2012 9:28:28 AM
 */
public class Pinyin4jUtil {

	/***************************************************************************
	 * 获取中文汉字拼音 默认输出
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:54:01 AM
	 * @param chinese
	 * @return
	 */
	public static String getPinyin(String chinese) {
		return getPinyinZh_CN(makeStringByStringSet(chinese));
	}

	/***************************************************************************
	 * 拼音大写输出
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:58:45 AM
	 * @param chinese
	 * @return
	 */
	public static String getPinyinToUpperCase(String chinese) {
		return getPinyinZh_CN(makeStringByStringSet(chinese)).toUpperCase();
	}

	/***************************************************************************
	 * 拼音小写输出
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:58:45 AM
	 * @param chinese
	 * @return
	 */
	public static String getPinyinToLowerCase(String chinese) {
		return getPinyinZh_CN(makeStringByStringSet(chinese)).toLowerCase();
	}

	/***************************************************************************
	 * 首字母大写输出
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 10:00:54 AM
	 * @param chinese
	 * @return
	 */
	public static String getPinyinFirstToUpperCase(String chinese) {
		return getPinyin(chinese);
	}

	/***************************************************************************
	 * 拼音简拼输出
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 11:08:15 AM
	 * @param chinese
	 * @return
	 */
	public static String getPinyinJianPin(String chinese) {
		return getPinyinConvertJianPin(getPinyin(chinese));
	}

	/***************************************************************************
	 * 字符集转换
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:34:11 AM
	 * @param chinese
	 *            中文汉字
	 * @throws BadHanyuPinyinOutputFormatCombination
	 */
	public static Set<String> makeStringByStringSet(String chinese) {
		char[] chars = chinese.toCharArray();
		if (chinese != null && !chinese.trim().equalsIgnoreCase("")) {
			char[] srcChar = chinese.toCharArray();
			String[][] temp = new String[chinese.length()][];
			for (int i = 0; i < srcChar.length; i++) {
				char c = srcChar[i];

				// 是中文或者a-z或者A-Z转换拼音
				if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) {

					try {
						temp[i] = PinyinHelper.toHanyuPinyinStringArray(
								chars[i], getDefaultOutputFormat());

					} catch (BadHanyuPinyinOutputFormatCombination e) {
						e.printStackTrace();
					}
				} else if (((int) c >= 65 && (int) c <= 90)
						|| ((int) c >= 97 && (int) c <= 122)) {
					temp[i] = new String[] { String.valueOf(srcChar[i]) };
				} else {
					temp[i] = new String[] { "" };
				}
			}
			String[] pingyinArray = Exchange(temp);
			Set<String> zhongWenPinYin = new HashSet<String>();
			for (int i = 0; i < pingyinArray.length; i++) {
				zhongWenPinYin.add(pingyinArray[i]);
			}
			return zhongWenPinYin;
		}
		return null;
	}

	/***************************************************************************
	 * Default Format 默认输出格式
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:35:51 AM
	 * @return
	 */
	public static HanyuPinyinOutputFormat getDefaultOutputFormat() {
		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 没有音调数字
		format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);// u显示
		return format;
	}

	/***************************************************************************
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:39:54 AM
	 * @param strJaggedArray
	 * @return
	 */
	public static String[] Exchange(String[][] strJaggedArray) {
		String[][] temp = DoExchange(strJaggedArray);
		return temp[0];
	}

	/***************************************************************************
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:39:47 AM
	 * @param strJaggedArray
	 * @return
	 */
	private static String[][] DoExchange(String[][] strJaggedArray) {
		int len = strJaggedArray.length;
		if (len >= 2) {
			int len1 = strJaggedArray[0].length;
			int len2 = strJaggedArray[1].length;
			int newlen = len1 * len2;
			String[] temp = new String[newlen];
			int Index = 0;
			for (int i = 0; i < len1; i++) {
				for (int j = 0; j < len2; j++) {
					temp[Index] = capitalize(strJaggedArray[0][i])
							+ capitalize(strJaggedArray[1][j]);
					Index++;
				}
			}
			String[][] newArray = new String[len - 1][];
			for (int i = 2; i < len; i++) {
				newArray[i - 1] = strJaggedArray[i];
			}
			newArray[0] = temp;
			return DoExchange(newArray);
		} else {
			return strJaggedArray;
		}
	}

	/***************************************************************************
	 * 首字母大写
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:36:18 AM
	 * @param s
	 * @return
	 */
	public static String capitalize(String s) {
		char ch[];
		ch = s.toCharArray();
		if (ch[0] >= 'a' && ch[0] <= 'z') {
			ch[0] = (char) (ch[0] - 32);
		}
		String newString = new String(ch);
		return newString;
	}

	/***************************************************************************
	 * 字符串集合转换字符串(逗号分隔)
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:37:57 AM
	 * @param stringSet
	 * @return
	 */
	public static String getPinyinZh_CN(Set<String> stringSet) {
		StringBuilder str = new StringBuilder();
		int i = 0;
		for (String s : stringSet) {
			if (i == stringSet.size() - 1) {
				str.append(s);
			} else {
				str.append(s + ",");
			}
			i++;
		}
		return str.toString();
	}

	/***************************************************************************
	 * 获取每个拼音的简称
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 11:05:58 AM
	 * @param chinese
	 * @return
	 */
	public static String getPinyinConvertJianPin(String chinese) {
		String[] strArray = chinese.split(",");
		String strChar = "";
		for (String str : strArray) {
			char arr[] = str.toCharArray(); // 将字符串转化成char型数组
			for (int i = 0; i < arr.length; i++) {
				if (arr[i] >= 65 && arr[i] < 91) { // 判断是否是大写字母
					strChar += new String(arr[i] + "");
				}
			}
			strChar += ",";
		}
		return strChar;
	}

	/***************************************************************************
	 * Test
	 * 
	 * @Name: Pinyin4jUtil.java
	 * @Description: TODO
	 * @author: wang_chian@foxmail.com
	 * @version: Jan 13, 2012 9:49:27 AM
	 * @param args
	 */
	public static void main(String[] args) {
		String str = "张三";
		System.out.println("小写输出:" + getPinyinToLowerCase(str));
		System.out.println("大写输出:" + getPinyinToUpperCase(str));
		System.out.println("首字母大写输出:" + getPinyinFirstToUpperCase(str));
		System.out.println("简拼输出:" + getPinyinJianPin(str));

	}
}
分享到:
评论
3 楼 fengwuqing40 2014-01-22  
zxh277100963 写道
有个bug String输入数字 报错
修改一下
   
 public static String capitalize(String s) {   
        char ch[];   
        ch = s.toCharArray();
     [color=red] if (ch!= null && ch.length > 0) { //修改[/color]
        if (ch[0] >= 'a' && ch[0] <= 'z') {   
            ch[0] = (char) (ch[0] - 32);   
        } 
      }
        String newString = new String(ch);   
        return newString;   
    }  
 


但是输出还是没数字
修改一下这

     else {   
                    temp[i] = new String[] { String.valueOf(srcChar[i]) };   
                }  


<b>如果需要输出数字,可修改getPinyinConvertJianPin方法中的if条件:<br/>
if (arr[i] >= 65 && arr[i] < 91 ||
(arr[i]>=48 && arr[i]<=57)) { // 判断是否是大写字母
strChar += new String(arr[i] + "");
}</b>
2 楼 pimkle 2013-05-30  
楼主说的很好 评论补充的也好 像是解决了多音字的问题 可是还需要用户自己来选择........
1 楼 zxh277100963 2012-08-09  
有个bug String输入数字 报错
修改一下
   
 public static String capitalize(String s) {   
        char ch[];   
        ch = s.toCharArray();
     [color=red] if (ch!= null && ch.length > 0) { //修改[/color]
        if (ch[0] >= 'a' && ch[0] <= 'z') {   
            ch[0] = (char) (ch[0] - 32);   
        } 
      }
        String newString = new String(ch);   
        return newString;   
    }  
 


但是输出还是没数字
修改一下这

     else {   
                    temp[i] = new String[] { String.valueOf(srcChar[i]) };   
                }  

相关推荐

    pinyin4j(解决多音字问题源码)

    《pinyin4j:解决中文多音字问题的利器》 在中文处理中,多音字是一个常见的挑战。多音字是指一个汉字有多个读音,根据不同的语境和组合,其发音会有所不同。例如,“长”既可以读作“cháng”,也可以读作“zhǎng...

    Java汉字转拼音(支持多音字)

    `Pinyin4j`是一个流行的Java库,专门用于处理汉字与拼音之间的转换,包括多音字的支持。使用这个库,开发者可以方便地获取汉字的声母、韵母以及声调等信息。 以下是一个简单的`Pinyin4j`使用示例: ```java import...

    pinyin4j-2.5.0

    在Java开发中,有时候我们需要将汉字转换成对应的汉语拼音,以便进行各种处理,如搜索、排序或者处理多音字问题。这时,`pinyin4j-2.5.0`这个开源库就显得尤为重要。它是一个强大的工具,能够帮助开发者轻松地实现...

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

    4. **处理特殊情况**:`pinyin4j`还支持处理多音字、声调、保留首字母等多种场景。例如,如果你想获取首字母,可以使用`toHanyuPinyinInitialsString()`方法;如果希望保留声调,可以使用`toHanyuPinyinStringArray...

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

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

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

    总结起来,pinyin4j-jar是一个强大的汉字转拼音工具,它提供了灵活的拼音输出格式设置,能有效处理多音字问题,广泛适用于各种需要汉字转拼音的场景。通过掌握其使用方法,开发者可以更高效地进行中文字符处理,提高...

    汉字转拼音、首字母、多音字java

    总的来说,Java中的汉字转拼音、首字母获取以及多音字处理主要依赖于像`pinyin4j`这样的第三方库,它们提供了丰富的功能,使得开发者能方便地进行中文字符的拼音处理。在实际项目中,正确理解和运用这些工具,可以...

    pinyin4j 开发jar包

    它支持多种拼音表示方式,包括全拼、简拼、声母、韵母等,同时也能够处理多音字和不常见的汉字,极大地扩展了Java处理中文的能力。此外,pinyin4j还提供了一些实用的辅助功能,如拼音排序、拼音比较等,为开发者提供...

    汉字转拼音库pinyin4j

    此外,pinyin4j还支持多音字的处理,能够根据上下文提供最可能的读音。 除了pinyin4j库本身,这次提供的压缩包还包含了"Sparta库"的源代码。Sparta并不是pinyin4j的直接依赖,但它可能是pinyin4j在某些场景下使用的...

    pinyin4j.zip pinyin4j.jar

    这个库不仅支持基本的拼音转换,还具备处理多音字、声调以及首字母简写等复杂情况的能力。例如,对于汉字“重”,Pinyin4j可以正确地输出其全拼“zhòng”和“chóng”,并可以根据需求选择是否保留声调。 在...

    汉字转拼音(支持多音字)

    总的来说,汉字转拼音是处理中文信息的重要技术,Pinyin4j作为Java和Android平台上的强大工具,能够有效地帮助我们完成这项任务,即使是面对多音字这样的复杂情况。在实际项目中,结合上下文判断和用户交互,我们...

    汉字转拼音java pinyin4j-2.5.0.jar

    除了基本的转换功能,`pinyin4j`还支持处理多音字,即根据上下文判断汉字的正确读音。此外,库中的`PinyinFormat`枚举类型提供了多种拼音格式设置,可以根据需求进行选择。 总的来说,`pinyin4j-2.5.0.jar`是一个...

    将简体中文和繁体中文转换拼音的jar包 pinyin4j-2.5.0.jar

    pinyin4j还提供了更复杂的功能,如获取单个字符的声母、韵母和声调,以及对多音字进行智能处理等。例如,获取汉字“一”的声母: ```java char c = '一'; String[] initials = PinyinHelper.getInitials(c, ...

    pinyin4j jar包

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

    使用pinyin4j将中文转换为拼音

    值得注意的是,pinyin4j不仅支持普通汉字的拼音转换,还能够处理一些特殊字符,如多音字和罕用字。此外,它还可以输出拼音的声母、韵母、声调等部分,为更复杂的应用场景提供了便利。 总的来说,pinyin4j是一个强大...

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

    它能够将汉字转换为汉语拼音,支持多音字,并且可以提供不同的拼音输出格式,如全拼、简拼以及声调标注。这个库广泛应用于Java和Android开发中,因为它的性能高效且易于集成。 在Android项目中,首先你需要将pinyin...

    pinyin4j拼音码获取

    它支持全拼和简拼,并且可以处理多音字,提供多种输出格式,如首字母、完整拼音等。 2. **安装与引入**:在项目中使用pinyin4j,首先需要将lib目录下的jar文件添加到项目的类路径中。如果是Maven项目,可以通过在...

    pinyin4j pinyin4j

    这个库不仅能够提供基本的汉字转拼音功能,还支持多音字的处理,以及拼音的声调标注,使得在Java环境下进行中文处理变得更加便捷。 Pinyin4j的核心功能包括: 1. **基本转换**:Pinyin4j能够将单个汉字或整个中文...

    java拼音搜索pinyin4j

    在实际应用中,还需要考虑一些细节问题,如如何处理多音字(一个字有多个读音)、如何处理未登录词(不在字典中的词汇)以及如何优化拼音匹配算法(如Levenshtein距离、Jaccard相似度等)。同时,为了提高用户体验,...

    pinyin4j-2.5.0.jar下载

    3. 处理多音字:某些汉字有多个读音,pinyin4j可以处理这种情况。例如,汉字“还”有两个读音“hái”和“huán”,`PinyinHelper.toHanyuPinyinStringArray('还')`将返回`["hái", "huán"]`。 4. 声调处理:pinyin...

Global site tag (gtag.js) - Google Analytics