使用到的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));
}
}