当前位置 : 主页 > 编程语言 > java >

Pinyin4j根据汉字获取对应的拼音

来源:互联网 收集:自由互联 发布时间:2021-06-28
PinyinUtil.java package com.myUtil;import java.util.ArrayList;import java.util.List;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import net.sourceforge.pinyin4j.format.HanyuPinyinOu
PinyinUtil.java
package com.myUtil;

import java.util.ArrayList;
import java.util.List;

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 PinyinUtil {
	/**
	 * 获取中文字符串的一组全拼
	 * @param 中文字符串
	 * @return hanyupinyin汉语拼音
	 */
	public static String getSingleFullPinyin(String cnString) {
		StringBuilder sb = new StringBuilder();
		char[] arr = cnString.toCharArray();
		for (char c : arr) {
			if (c > 128) {
				try {
					sb.append(PinyinHelper.toHanyuPinyinStringArray(c, outputFormat)[0]);
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 获取中文字符串的一组首字母
	 * @param 中文字符串
	 * @return hypy汉语拼音
	 */
	public static String getSingleFirstPinyin(String cnString) {
		StringBuilder sb = new StringBuilder();
		char[] arr = cnString.toCharArray();
		for (char c : arr) {
			if (c > 128) {
				try {
					sb.append(PinyinHelper.toHanyuPinyinStringArray(c, outputFormat)[0].charAt(0));
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
	}
	
	/**
	 * 获取中文字符串的所有全拼组合(包括多音字)
	 * @param 中文字符串
	 * @return hanyupinyin汉语拼音的List
	 */
	public static List
 
   getAllFirstPinyin(String cnString) {
		char[] arr = cnString.toCharArray();
		String[][] strings = new String[cnString.length()][];
		for (int i = 0; i < strings.length; i++) {
			if (arr[i] > 128) {
				try {
					String[] tmpStrings = PinyinHelper.toHanyuPinyinStringArray(arr[i], outputFormat);
					strings[i] = new String[tmpStrings.length];
					for (int j = 0; j < tmpStrings.length; j++) {
						strings[i][j] = tmpStrings[j].substring(0, 1);
					}
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
				}
			} else {
				strings[i] = new String[]{String.valueOf(arr[i])};
			}
		}
		List
  
    list = new ArrayList
   
    (); permuteAndCombine(list, strings, 0, 0, ""); return list; } /** * 获取中文字符串的所有首字母组合(包括多音字) * @param 中文字符串 * @return hypy汉语拼音的List */ public static List
    
      getAllFullPinyin(String cnString) { char[] arr = cnString.toCharArray(); String[][] strings = new String[cnString.length()][]; for (int i = 0; i < strings.length; i++) { if (arr[i] > 128) { try { strings[i] = PinyinHelper.toHanyuPinyinStringArray(arr[i], outputFormat); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { strings[i] = new String[]{String.valueOf(arr[i])}; } } List
     
       list = new ArrayList
      
       (); permuteAndCombine(list, strings, 0, 0, ""); return list; } /** * 二维数组排列组合 * @return 结果放到list */ private static void permuteAndCombine(List
       
         list, String[][] strings, int i, int j, String before) { if (i < strings.length - 1) { for (; j < strings[i].length; j++) { String after = before + strings[i][j]; permuteAndCombine(list, strings, i+1, 0, after); } } else { for (String str : strings[i]) { String after = before + str; if (!list.contains(after)) { list.add(after); } } } } /** * 定义拼音的输出格式 */ private static HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat(); static { //默认设置小写 outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); //默认设置没有音调 outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); //默认设置显示v outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V); } public static HanyuPinyinOutputFormat getOutputFormat() { return outputFormat; } public static void setOutputFormat(HanyuPinyinOutputFormat outputFormat) { PinyinUtil.outputFormat = outputFormat; } }
       
      
     
    
   
  
 
网友评论