java获取一段话的首字母或拼音

 使用到的maven依赖

<dependency>
	<groupId>com.belerweb</groupId>
	<artifactId>pinyin4j</artifactId>
	<version>2.5.1</version>
</dependency>
package com.yt.eos.common.pinyin;

import org.apache.commons.lang3.StringUtils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 中文转拼音/简码
 * 
 * @author tyg
 * @date 2018年9月5日下午2:55:02
 */
public class PinYinUtil {

	/** 纯字母 */
	public static final String ONLY_LETTER_REG = "^[a-zA-Z]{1,}$";

	// pinyin4j格式类
	private static HanyuPinyinOutputFormat format = null;

	// 通过构造方法进行初始化
	static {
		/*
		 * 设置需要转换的拼音格式 以天为例 
		 * HanyuPinyinToneType.WITHOUT_TONE 转换为tian
		 * HanyuPinyinToneType.WITH_TONE_MARK 转换为tian1
		 * HanyuPinyinVCharType.WITH_U_UNICODE 转换为tiān
		 */
		format = new HanyuPinyinOutputFormat();
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
	}

	/**
	 * 对单个字进行转换
	 * @param data
	 * @return
	 * @return String
	 * @author tyg
	 * @date   2018年9月5日下午3:08:48
	 */
	private static String getCharPinYin(char data) {
		try {
			// 执行转换
			String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(data, format);
			// pinyin4j规则,当转换的符串不是汉字,就返回null
			if (pinyin == null || pinyin.length == 0) {
				return null;
			}
			// 多音字会返回一个多音字拼音的数组,pinyiin4j并不能有效判断该字的读音
			return pinyin[0];
		} catch (BadHanyuPinyinOutputFormatCombination e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 对单个字进行转换
	 * @param chinese
	 * @return
	 * @return String
	 * @author tyg
	 * @date   2018年9月5日下午3:08:42
	 */
	public static String getStringPinYin(String chinese) {
		StringBuffer sb = new StringBuffer();
		// 循环字符串
		for (int i = 0; i < chinese.length(); i++) {
			String tempStr = getCharPinYin(chinese.charAt(i));
			// 非汉字直接拼接
			sb = tempStr == null ? sb.append(chinese.charAt(i)) : sb.append(tempStr);
		}
		return sb.toString();
	}

	/**
	 * 转换为每个汉字对应拼音首字母字符串(只会对汉字进行处理)
	 * @param chinese 需转换的汉字
	 * @return
	 * @return String
	 * @author tyg
	 * @date   2018年9月5日下午3:31:03
	 */
	public static String getFirstPinYin(String chinese) {
		if (StringUtils.isBlank(chinese)) {
			return null;
		}
		StringBuffer sb = new StringBuffer();
		// 循环字符串
		for (int i = 0; i < chinese.length(); i++) {
			String tempStr = getCharPinYin(chinese.charAt(i));
			if (tempStr != null) {
				sb.append(tempStr.charAt(0));
			}
		}
		return sb.toString();
	}
	
	/**
	 * 转换为每个汉字对应拼音首字母字符串(会对汉字和字母进行处理)
	 * @param chinese 需转换的汉字
	 * @return
	 * @return String
	 * @author tyg
	 * @date   2018年10月11日上午11:27:25
	 */
	public static String getFirstPinYinAndCode(String chinese) {
		if (StringUtils.isBlank(chinese)) {
			return null;
		}
		StringBuffer sb = new StringBuffer();
		// 循环字符串
		for (int i = 0; i < chinese.length(); i++) {
			String tempStr = getCharPinYin(chinese.charAt(i));
			if (tempStr != null) {
				sb.append(tempStr.charAt(0));
			} else if(chinese.substring(i, i+1).matches(ONLY_LETTER_REG)){
				sb.append(chinese.charAt(i));
			}
		}
		return sb.toString();
	}
    
	public static void main(String[] args) {
		System.out.println(getStringPinYin("我**爱00你"));
		System.out.println(getStringPinYin("重庆"));
		System.out.println(getFirstPinYin("四川**电子商务有限公司"));
		System.out.println(getFirstPinYin("0000"));
		System.out.println("F3A".substring(0, 1).matches(ONLY_LETTER_REG));
	}
}

猜你喜欢

转载自blog.csdn.net/qq_26365837/article/details/89926603