`

汉字转拼音pinyin4j

    博客分类:
  • Java
 
阅读更多

以前在项目中遇到汉字转拼音的情况,于是在网上找到了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包。
2
3
分享到:
评论

相关推荐

    java汉字转拼音,android汉字转拼音,汉字转拼音首字母,汉字转ASCII

    `Pinyin4j`是一个强大的Java库,能够将汉字转换为汉语拼音,并支持多音字和声调。以下是一个简单的使用示例: ```java import net.sourceforge.pinyin4j.PinyinHelper; import ...

    中文汉字转拼音 大写(默认) 小写 首字母大写

    在IT领域,中文汉字转拼音是一项常见的处理任务,特别是在自然语言处理、文本分析以及编程中。这个任务的主要目的是将汉字转换成对应的汉语拼音,以便计算机能够更好地理解和处理中文信息。以下将详细介绍汉字转拼音...

    汉字转换拼音 java

    例如,使用Pinyin4j库,只需引入依赖,然后通过调用特定方法,就能快速地将汉字转换为拼音。下面是一个简单的示例: ```java import net.sourceforge.pinyin4j.PinyinHelper; public class HanziToPinyin { ...

    delphi12 汉字转拼音全拼及简拼 XE

    汉字转拼音是计算机处理中文文本的重要一环。全拼是指将汉字转换为完整的汉语拼音,而简拼则是用简化的形式表示汉字,通常只包含声母和韵母,不包括声调。在Delphi 12 XE中,我们可以利用内置的TCharServices组件...

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

    在解压缩后的文件列表中提到的“Hanyupinyin”,很可能是包含了`Pinyin4j`库的JAR文件或其他相关的资源,这些资源可以帮助开发者在本地环境中实现汉字转拼音的功能。如果需要更深入地研究或定制功能,可以查看`...

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

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

    基于Java的零依赖汉字转拼音库Bopomofo4j设计源码

    该项目是一个零依赖的Java汉字转拼音库Bopomofo4j的设计源码,包含28个文件,其中包括17个Java源文件、4个JSON配置文件、1个Git忽略文件、1个许可证文件、1个Markdown文档、1个XML文件、1个JavaScript文件和1个映射...

    关于汉字转拼音的实现方法.rar(简单方便实用)

    此外,实现汉字转拼音还可以考虑使用开源项目,如Pinyin4j(Java)、PyPinyin(Python)等,它们提供了丰富的功能和良好的社区支持。但如果你选择使用提供的库文件,那么你需要对C++或C#等支持DLL导入的语言有一定...

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

    《中文转拼音工具类——pinyin4j-2.5.0.jar 在处理地址与人名中的应用》 在处理中文数据时,有时我们需要将汉字...通过合理利用pinyin4j提供的API,开发者可以极大地提高工作效率,简化涉及中文拼音转换的项目开发。

    java汉字转拼音(全拼和首字母)

    在Java编程语言中,汉字转拼音是一项常见的需求,特别是在处理中文数据、搜索引擎优化或文本处理等领域。本篇文章将深入探讨如何使用Java实现汉字转拼音的功能,包括获取汉字的全拼和首字母。 首先,我们需要理解...

    Android汉字转拼音例子

    - `pinyin4j`:这是一个Java库,也可以在Android中使用,提供了将汉字转换为拼音的功能,支持声调标记。 - `android-pinyin4j`:专门为Android优化的版本,体积小,适合嵌入式应用。 - `libpinyin`:一个C++编写...

    delphi 汉字转拼音首字母含生僻字

    汉字转拼音是指将汉字转换为其对应的汉语拼音,这对于非中文用户理解和处理中文文本非常有用。在Delphi中,实现这个功能通常需要调用特定的库或者API,比如Microsoft的Uniscribe或Google的Pinyin4j(虽然Pinyin4j是...

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

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

    汉字转拼音.rar

    这个"汉字转拼音.rar"压缩包提供了一个解决方案,它包含了一个名为"pinyin4j"的Java库,版本为2.5.0。Pinyin4j是一个开源的Java库,专门用于将汉字转换为对应的拼音表示,这对于处理中文文本、搜索优化、语音合成等...

    flex 汉字转拼音

    它可能使用了某种汉字到拼音的映射表,或者采用了类似于Pinyin4j的Java库的ActionScript版本,该库能够将汉字转换为普通话拼音。 `TestPinYin.as`可能是一个测试类,用于验证`HanZi2PinYin.as`中的函数是否正常工作...

    汉字转拼音库pinyin4j

    《汉字转拼音库pinyin4j与Sparta库解析》 在Java开发中,有时候我们需要将汉字转换为对应的拼音,以便进行各种处理,比如文本分析、搜索索引或者语音合成等。这时,我们就需要借助特定的库来完成这项工作。"汉字转...

    android 汉字转拼音

    "android 汉字转拼音"是这样一个功能,它可以将中文字符转化为它们的拼音表示。在这个项目中,我们有两个核心文件:`HanziToPinyin.java`和`HanziToPinyinTest.java`。 `HanziToPinyin.java`通常包含一个类,这个类...

    汉字转换为拼音,取汉字的拼音首字母

    总的来说,`pinyin4j`库为Java开发者提供了强大的汉字转拼音功能,简化了处理中文文本的复杂性,是进行汉字相关处理的得力工具。通过熟练掌握和运用`pinyin4j`,我们可以轻松实现汉字到拼音的转换,从而在各种IT应用...

    DelPhi中文转拼音,全拼和首字母

    3. 汉字转拼音算法:可能采用了开源库如Pinyin4j或其他算法实现,涉及到汉字到拼音的映射和处理。 4. 文件I/O操作:如果程序涉及读取或保存拼音数据,可能需要掌握文件操作的相关知识。 5. 错误处理和异常处理:确保...

    汉字转拼音码和五笔码(Winform)

    这个应用程序可能使用了诸如Pinyin4j或Microsoft的Unidecode等库,这些库能够准确地将每个汉字映射到其标准拼音。 接着,五笔码转换是另一个关键功能。五笔码是一种汉字输入法,通过将汉字拆分成基本的笔画和部首,...

Global site tag (gtag.js) - Google Analytics