pinyin4j是一个开源的流行java库(官网地址:http://pinyin4j.sourceforge.net/,在线文档:http://pinyin4j.sourceforge.net/pinyin4j-doc/ ),使用来处理中文转换成拼音(汉语拼音,罗马拼音等),功能强大。
有几个常用的类:
net.sourceforge.pinyin4j.PinyinHelper;
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
PinyinHelper:提供了几个实用程序函数,用于将中文字符(简体和繁体)转换为各种中文罗马化表示。
HanyuPinyinOutputFormat:这个类定义了如何输出汉语拼音。
HanyuPinyinCaseType:为汉语拼音字符串的输出案例提供了几种选项。
HanyuPinyinToneType:该类提供了几种输出中文音调的选项。
HanyuPinyinVCharType:这个类为’ü’的输出提供了几个选项。
使用的时候需要下载pinyin4j.jar包,或者通过maven下载,依赖如下:
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
基于pinyin4j封装的工具类:
import org.apache.commons.lang3.StringUtils;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public class PyUtils {
/**
* 通过字符串获取大写拼音
* @param Str
* @return
* @throws BadHanyuPinyinOutputFormatCombination
*/
public static String getPyByStr(String Str) {
try {
if(StringUtils.isBlank(Str)){
return "";
}
char[] charArray = Str.toCharArray();
HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
// 通过循环获取拼音
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < charArray.length; i++) {
String[] hanyuPinyinStringArray = PinyinHelper.toHanyuPinyinStringArray(charArray[i], outputFormat);
if (hanyuPinyinStringArray != null && hanyuPinyinStringArray.length > 0) {
buffer.append(hanyuPinyinStringArray[0].charAt(0));
} else {
buffer.append(charArray[i]);
}
}
return buffer.toString().toUpperCase();
} catch (Exception e) {
return "";
}
}
/**
*
* @Title: replaceSpecialCharacter
* @Description: 将特殊字符换为target字符串,""代表直接去掉
* @param source
* 源字符串 如:ZJ0.5~0.7CMDT≥98%
* @param target
* 将特殊字符替换的结果 如:ZJ0507CMDT98
* @return
* @Date 2020年9月3日
*/
public static String replaceSpecialCharacter(String source,String target ) {
// 可以在中括号内加上任何想要替换的字符,实际上是一个正则表达式
String regEx = "[\n`~!@#$%%^&*()+=|{}':;',\\[\\].<>≤≥/?~!@#¥%……&*()()——+|{}【】‘;:”“’。, 、?]";
String pyByStr = PyUtils.getPyByStr(source);
String newString = pyByStr.replaceAll(regEx, target);
return newString;
}
/**
* 获取首个拼音首字母
* @param name
* @return
* @Date 2020年9月3日
*/
public static String getFirstAz(String name) {
String py = getPyByStr(name);
for (int i = 0; i < py.length(); i++) {
String s = String.valueOf(py.charAt(i));
if(s.matches("[A-Z]")) {
return s;
}
}
return "X";
}