中文转 拼音字母、全拼 工具类

什么都不用说了  直接贴代码:

package test;

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;

/**
 * 中文转字母、拼音工具类<br><br>
 * 注意:依赖的jar包:pinyin4j-2.5.0.jar
 * 
 * @author wp Dec 9, 2015 6:40:59 PM
 *
 */
public class PinYinAPI {
	
	public static void main(String[] args) {
		String ss = PinYinAPI.getPinYinFull("吕氏春秋,我有一颗真挚的心,不要问我为什么?使用PinYin4j很好啊!");
		System.out.println(ss);
		String bb = PinYinAPI.getPinYinFirstChar("吕,我有一颗真挚的心,不要问我为什么?使用PinYin4j很好啊!");
		System.out.println(bb);
	}
	
	/**
	 * 得到中文的全拼
	 * @param str
	 * @return
	 */
	public static String getPinYinFull(String str){
		return getPinYin(str, true, ToneType.no_tone, true, false);
	}
	
	/**
	 * 得到中文的首字母(大写)
	 * @param str
	 * @return
	 */
	public static String getPinYinFirstChar(String str){
		return getPinYin(str, false, ToneType.no_tone, false, true);
	}
	
	/**
	 * 声调类型(no_tone:无声调、num_tone:数字声调、mark_tone:标记声调-中文)
	 *
	 */
	public static enum ToneType{
		no_tone, num_tone, mark_tone
	}
	private static HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
	
	/**
    * 提取每个汉字的全拼或者首字母
    * 
     * @param str 要转换的字符串
     * @param isFull 是否转全拼
     * @param tone 声调类型
     * @param isLow 是否转小写
     * @param isTrim 是否去除中间的空格
     * @return
     */
    public static String getPinYin(String str, boolean isFull, ToneType tone, boolean isLow, boolean isTrim) {
        if (isNull(str)) {
            return "";
        }
        if(isLow){
        	//转换大小写 (LOWERCASE:小写:默认格式、UPPERCASE:大写)
        	format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        }else{
        	format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        }
        if(ToneType.mark_tone.equals(tone)){
        	// WITH_TONE_NUMBER(以数字代替声调:默认格式)、WITHOUT_TONE (无声调)、WITH_TONE_MARK (有声调,编码必须使用WITH_U_UNICODE)
        	format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
        	// 以“吕”为例:WITH_U_AND_COLON(lu:3:默认格式)、WITH_U_UNICODE(lü3)、WITH_V(lv3)
        	format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
        } else if(ToneType.num_tone.equals(tone)){
        	format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);
        	format.setVCharType(HanyuPinyinVCharType.WITH_V);
        } else{
        	format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        	format.setVCharType(HanyuPinyinVCharType.WITH_V);
        }
        
        StringBuilder sb = new StringBuilder();
        
        boolean flag = false;
        for (int i = 0; i < str.length(); i++) {
            char word = str.charAt(i);
            // 提取汉字的首字母、拼音
			try {
				String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(word, format);
//				pinyinArray = PinyinHelper.toTongyongPinyinStringArray(word);
//				pinyinArray = PinyinHelper.toYalePinyinStringArray(word);
//				pinyinArray = PinyinHelper.toWadeGilesPinyinStringArray(word);
			
//	            System.out.println(Arrays.toString(pinyinArray));
				
	            if (pinyin != null) {
	            	if(isFull){
	            		if(flag){
	            			sb.append(" "+pinyin[0]);
	            		}else{
	            			sb.append(pinyin[0]);
	            			flag = true;
	            		}
	            	}else{
	            		sb.append(pinyin[0].charAt(0));
	            	}
	            }else {
	                sb.append(word);
	                flag = false;
	            }
			} catch (Exception e) {
				e.printStackTrace();
				sb.append(word);
			}
        }
        return sb.toString();
    }

   /**
    * 判断字符串是否为空
    */

    private static boolean isNull(Object strData) {
        if (strData == null || String.valueOf(strData).trim().equals("")) {
            return true;
        }
        return false;
    }

	

}

猜你喜欢

转载自276833190.iteye.com/blog/2262982