pinyin4j使用中文转化拼音

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

[Java]代码    

package com.app.common.code;

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;
import org.apache.commons.lang3.StringUtils;

/**
 * 针对中文转化拼音处理
 * Created by lance on 2016/1/16.
 */
public class PinYinUtils {
	
	/**
	 * 转为大写字母, 如:中国人民银行 =====>ZHONGGUORENMINYINHAN
	 * @author lance
	 * 2016年1月16日 下午4:56:07
	 */
	public static String convertUpper(String text){
		return convert(text, HanyuPinyinCaseType.UPPERCASE, false);
	}
	
	/**
	 * 转为小写字母, 如:中国人民银行 =====>zhongguorenminyinhang
	 * @author lance
	 * 2016年1月16日 下午4:56:07
	 */
	public static String convertLower(String text){
		return convert(text, HanyuPinyinCaseType.LOWERCASE, false);
	}
	
	/**
	 * 首字母大写, 如:中国人民银行 =====>ZhongGuoRenMinYinHang
	 * @author lance
	 * 2016年1月16日 下午5:04:11
	 */
	public static String converCapitalize(String text){
		return convert(text, null, true);
	}
	
	/**
	 * 所有中文的第一个字母大写, 如:中国人民银行 =====>ZGRMYH
	 * @author lance
	 * 2016年1月17日 下午10:16:19
	 */
	public static String capitalizeLetter(String text){
		String c = converCapitalize(text);
		if(StringUtils.isBlank(c)) {
			return "";
		}
		
		return StringUtils.replacePattern(c, "[a-z]", "");
	}
	
	/**
	 * 获取首字母, 如:中国人民银行 =====>Z
	 * @author lance
	 * 2016年1月17日 下午10:11:57
	 */
	public static String firstLetter(String text){
		String c = converCapitalize(text);
		if(StringUtils.isBlank(c)) {
			return "";
		}
		
		return StringUtils.substring(c, 0, 1);
	}
	
	/**
	 * 转为拼音
	 * @param text			待转化的中文字符
	 * @param caseType		转化类型, 即大写小写
	 * @param isCapitalize	是否首字母大写
	 * @author lance
	 * 2016年1月17日 下午10:28:05
	 */
    public static String convert(String text, HanyuPinyinCaseType caseType, boolean isCapitalize) {
        if(StringUtils.isBlank(text)){
            return "";
        }
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        if(caseType != null) {
        	format.setCaseType(caseType);
        	isCapitalize = false;
        }
        
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        format.setVCharType(HanyuPinyinVCharType.WITH_V);
        char[] input = StringUtils.trimToEmpty(text).toCharArray();
        StringBuilder builder = new StringBuilder();
        try {
            for (char c: input) {
                if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(c, format);
                    if(isCapitalize) {
                    	builder.append(StringUtils.capitalize(temp[0]));
                    }else {
                    	builder.append(temp[0]);
                    }
                } else {
                	if(isCapitalize) {
                    	builder.append(StringUtils.capitalize(Character.toString(c)));
                    }else {
                    	 builder.append(Character.toString(c));
                    }
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination ex) {
        	ex.printStackTrace();
        }

        return builder.toString();
    }
}

[Java]代码    

@Test(enabled = true)
	public void convert() {
		String text = "浏览项目的情况, Hello world!";
		logger.info("convertUpper: {}", PinYinUtils.convertUpper(text));
		logger.info("convertLower: {}", PinYinUtils.convertLower(text));
		logger.info("converCapitalize: {}", PinYinUtils.converCapitalize(text));
		logger.info("firstLetter: {}", PinYinUtils.firstLetter(text));
		logger.info("capitalizeLetter: {}", PinYinUtils.capitalizeLetter(text));
	}

/**测试结果***/
22:37:48.044 [main] INFO  com.app.common.GenerationData   - convertUpper: LIULANXIANGMUDEQINGKUANG, Hello world!
22:37:48.045 [main] INFO  com.app.common.GenerationData   - convertLower: liulanxiangmudeqingkuang, Hello world!
22:37:48.045 [main] INFO  com.app.common.GenerationData   - converCapitalize: LiuLanXiangMuDeQingKuang, HELLO WORLD!
22:37:48.046 [main] INFO  com.app.common.GenerationData   - firstLetter: L
22:37:48.046 [main] INFO  com.app.common.GenerationData   - capitalizeLetter: LLXMDQK, HELLO WORLD!

标签: 代码

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:python 爬虫

下一篇:sphinx 增量索引实现实例