项目中有时候需要把中文的拼音或首字母拿来做code区分或动态建表,工具类记录下,需要的时候直接复制过去就可以用了。
需要引入一个Jar:
<dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependency>
最后我选择用拼音的首字母+时间戳的方式做为code,原因吗,看下执行结果就知道了。
package com.common.util;
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.exception.BadHanyuPinyinOutputFormatCombination;
import org.apache.commons.lang3.StringUtils;
/**
* @description: 中文字符串处理工具
* @author: JandMin
**/
public class ChineseStrHelp {
public static void main(String[] args) {
// demo
String str = "中文-abc+拼音";
long start = System.currentTimeMillis();
// 获取拼音
System.out.println("获取拼音:" + convertToPinYin(str) + ",耗时:"+(System.currentTimeMillis()-start)+"毫秒");
start = System.currentTimeMillis();
// 获取拼音首字母
System.out.println("获取拼音首字母:" + getPinYinHeadChar(str) + ",耗时:"+(System.currentTimeMillis()-start)+"毫秒");
}
/**
* @Description: 获取中文字符串的拼音
* @param chines 中文字符串
* @return: java.lang.String
*/
public static String convertToPinYin(String chines) {
if(StringUtils.isBlank(chines)){
return "";
}
StringBuffer pinyinName = new StringBuffer();
char[] nameChar = chines.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
int length = nameChar.length;
for (int i = 0; i < length; i++) {
String s = String.valueOf(nameChar[i]);
if (s.matches("[\\u4e00-\\u9fa5]")) {
try {
String[] mPinyinArray = PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat);
pinyinName.append(mPinyinArray[0]);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pinyinName.append(nameChar[i]);
}
}
return pinyinName.toString();
}
/**
* @Description: 获取中文首字母大写并加时间戳
* @param chines 中文字符串
* @return: java.lang.String
*/
public static String getUpperHeadCharTimestamp(String chines){
return getUpperHeadChar(chines) + System.currentTimeMillis();
}
/**
* @Description: 获取中文首字母大写
* @param chines 中文字符串
* @return: java.lang.String
*/
public static String getUpperHeadChar(String chines){
if(StringUtils.isBlank(chines)){
return "";
}
return getPinYinHeadChar(chines).toUpperCase();
}
/**
* @Description: 获取中文首字母
* @param chines
* @return: java.lang.String
*/
public static String getPinYinHeadChar(String chines) {
if(StringUtils.isBlank(chines)){
return "";
}
StringBuffer py = new StringBuffer();
int len = chines.length();
for (int j = 0; j < len; j++) {
char word = chines.charAt(j);
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
if (pinyinArray != null) {
py.append(pinyinArray[0].charAt(0));
} else {
py.append(word);
}
}
return py.toString();
}
}
demo执行结果:
获取拼音:zhongwen-abc+pinyin,耗时:76毫秒
获取拼音首字母:zw-abc+py,耗时:0毫秒