package com.doumee.core.utils;
|
|
|
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;
|
|
/**
|
* 汉语拼音帮助类
|
*
|
* @author yanglong
|
*
|
*/
|
public class PinYinUtil {
|
|
/**
|
* 比较两个汉字的首字母 <br>
|
*
|
* @param ch1
|
* @param ch2
|
* @return
|
*/
|
public static int comparatorWord(String ch1, String ch2) {
|
return getFirstSpell(ch2).compareTo(getFirstSpell(ch1));
|
}
|
|
public static void main(String[] args) {
|
String[] t = new String[]{
|
"QC/QD06林内水伺服16",
|
"QS04林内白色13",
|
"QC05林内13",
|
"QS04林内白色16",
|
"QC06(C08)林内水伺服13",
|
"GD32林内16",
|
"QC05林内16",
|
"GD61R林内零冷水16",
|
"QS41/QD31林内16",
|
"QS41/QD31林内13",
|
"E32(R32F)林内白色零冷水16",
|
"E32(R32F)林内白色零冷水20",
|
"E32(R32F)林内白色零冷水24",
|
"GD32林内13",
|
"QD32林内13",
|
"QD32林内16",
|
"QD33W林内16",
|
"QD33W林内13",
|
"E66林内水伺服13",
|
"E86林内零冷水水伺服16",
|
"E86林内零冷水水伺服20",
|
"E86林内零冷水水伺服24",
|
"X氧林内白零冷水水伺服16",
|
"QS01林内白11",
|
"GD31林内白13",
|
"GD31林内白16",
|
"GD32林内13",
|
"GD32林内16",
|
"QC05+SG林内零冷水",
|
"D03林内经典13",
|
"D03林内经典16",
|
"D66W林内",
|
"M16(M73)林内白水伺:服",
|
"C01(QD01)林内白"
|
|
};
|
System.err.println(t.length);
|
for(String s : t){
|
System.err.println("==============="+s);
|
System.err.println(getFullSpell(s));
|
}
|
|
|
}
|
/**
|
* 获取汉字串拼音首字母,英文字符不变
|
*
|
* @param chinese
|
* 汉字串
|
* @return 汉语拼音首字母
|
*/
|
public static String getFirstSpell(String chinese) {
|
try {
|
StringBuffer pybf = new StringBuffer();
|
char[] arr = chinese.toCharArray();
|
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
for (int i = 0; i < arr.length; i++) {
|
if (arr[i] > 128) {
|
try {
|
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
|
arr[i], defaultFormat);
|
if (temp != null) {
|
pybf.append(temp[0].charAt(0));
|
}
|
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
e.printStackTrace();
|
}catch (Exception e){
|
//e.printStackTrace();
|
}
|
} else {
|
pybf.append(arr[i]);
|
}
|
}
|
return pybf.toString().replaceAll("\\W", "").trim();
|
|
}catch (Exception e){
|
|
}
|
return null;
|
}
|
/**
|
* 获取汉字串拼音首字母,英文字符不变
|
*
|
* @param chinese
|
* 汉字串
|
* @return 汉语拼音首字母
|
*/
|
public static String getFirstFirstSpell(String chinese) {
|
if(StringUtils.isBlank(chinese)){
|
return null;
|
}
|
StringBuffer pybf = new StringBuffer();
|
chinese = chinese.substring(0,1);
|
char[] arr = chinese.toCharArray();
|
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
for (int i = 0; i < arr.length; i++) {
|
if (arr[i] > 128) {
|
try {
|
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
|
arr[i], defaultFormat);
|
if (temp != null) {
|
pybf.append(temp[0].charAt(0));
|
}
|
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
e.printStackTrace();
|
}catch (Exception e){
|
//e.printStackTrace();
|
}
|
} else {
|
pybf.append(arr[i]);
|
}
|
}
|
return pybf.toString().replaceAll("\\W", "").trim().toUpperCase();
|
}
|
|
/**
|
* 获取汉字串拼音,英文字符不变
|
*
|
* @param chinese
|
* 汉字串
|
* @return 汉语拼音
|
*/
|
public static String getFullSpell(String chinese) {
|
try {
|
StringBuffer pybf = new StringBuffer();
|
char[] arr = chinese.toCharArray();
|
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
for (int i = 0; i < arr.length; i++) {
|
if (arr[i] > 128) {
|
try {
|
pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i],
|
defaultFormat)[0]);
|
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
//e.printStackTrace();
|
}catch (Exception e){
|
//e.printStackTrace();
|
}
|
} else {
|
pybf.append(arr[i]);
|
}
|
}
|
return pybf.toString();
|
}catch (Exception e){
|
|
}
|
return null;
|
}
|
}
|