使用到的maven依赖
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
package com.scmp.common.utils;
import net.dreamlu.mica.core.utils.$;
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 final HanyuPinyinOutputFormat FORMAT;
// 通过构造方法进行初始化
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 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 ($.isEmpty(pinyin)) {
return null;
}
// 多音字会返回一个多音字拼音的数组,pinyiin4j并不能有效判断该字的读音
return pinyin[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return null;
}
/**
* 汉字转换为拼音的全拼,
* 例:四川省,sichuansheng
* 例:四**川省,si**chuansheng
* @param chinese 汉字
* @return String
* @author tyg
* @date 2018年9月5日下午3:08:42
*/
public static String getPinYin(String chinese) {
StringBuilder sb = new StringBuilder();
// 循环字符串
for (int i = 0; i < chinese.length(); i++) {
String tempStr = getCharPinYin(chinese.charAt(i));
// 非汉字直接拼接
if (tempStr == null) {
sb.append(chinese.charAt(i));
} else {
sb.append(tempStr);
}
}
return sb.toString();
}
/**
* 获取汉字的首字母(只会对汉字进行处理),例:四川省,scs
* @param chinese 需转换的汉字
* @return String
* @author tyg
* @date 2018年9月5日下午3:31:03
*/
public static String getInitial(String chinese) {
if ($.isBlank(chinese)) {
return null;
}
StringBuilder sb = new StringBuilder();
// 循环字符串
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();
}
/**
* 转换为每个汉字对应拼音首字母字符串(会对汉字和字母进行处理),例:四川省cds,scscds
* @param chinese 需转换的汉字
* @return String
* @author tyg
* @date 2018年10月11日上午11:27:25
*/
public static String getInitialTwo(String chinese) {
if (StringUtils.isBlank(chinese)) {
return null;
}
StringBuilder sb = new StringBuilder();
// 循环字符串
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(getPinYin("我**爱00你"));
System.out.println(getPinYin("成都市"));
System.out.println(getInitial("四川省"));
System.out.println(getInitialTwo("四川省cds"));
System.out.println("F3A".substring(0, 1).matches(ONLY_LETTER_REG));
}
}