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.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public class Pinyin4jUtil {
/**
* 将中文字符串(仅中文)转为拼音
*
* @param input
* @return
* @throws BadHanyuPinyinOutputFormatCombination
*/
public static String toPinyin(String input) throws BadHanyuPinyinOutputFormatCombination {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
StringBuffer sb = new StringBuffer();
char[] cArray = input.toCharArray();
for (char c : cArray) {
String[] array = PinyinHelper.toHanyuPinyinStringArray(c, format);
if (array.length > 0) {
sb.append(array[0]);
}
}
return sb.toString();
}
/**
* 将字符串(中文,英文,标点)转为拼音. 中文转为拼音,英文去除空格小写,标点被忽略.
*
* @param input
* @return
* @throws BadHanyuPinyinOutputFormatCombination
*/
public static String comperss(String input) throws BadHanyuPinyinOutputFormatCombination {
char[] inputChar = input.toCharArray();
StringBuffer sb = new StringBuffer();
for (char c : inputChar) {
if (checkChinese(c)) {
sb.append(toPinyin(c));
} else {
if (Character.isLetter(c)) {
sb.append(String.valueOf(c).toLowerCase());
}
}
}
return sb.toString();
}
/**
* 判断字符是否为中文
*
* @param word
* @return
*/
public static boolean checkChinese(char word) {
if ((word >= 0x4e00) && (word <= 0x9fbb))
return true;
else
return false;
}
/**
* 将单个字符转为拼音
*
* @param input
* @return
* @throws BadHanyuPinyinOutputFormatCombination
*/
public static String toPinyin(char input) throws BadHanyuPinyinOutputFormatCombination {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
StringBuffer sb = new StringBuffer();
String[] array = PinyinHelper.toHanyuPinyinStringArray(input, format);
if (array.length > 0) {
sb.append(array[0]);
}
return sb.toString();
}
/**
* 取中文和英文首字母,数字等
*/
public static String getFirstLetter(String ChineseLanguage) {
char[] cl_chars = ChineseLanguage.trim().toCharArray();
StringBuffer hanyupinyin = new StringBuffer();
StringBuffer letter = new StringBuffer(); // 英文字符缓存
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 输出拼音全部大写
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
for (char c : cl_chars) {
try {
String str = String.valueOf(c);
if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
if (letter.length() > 0) {
hanyupinyin.append(letter.substring(0, 1).toUpperCase());
letter.setLength(0);
}
hanyupinyin.append(PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat)[0].substring(0, 1));
} else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
if (letter.length() > 0) {
hanyupinyin.append(letter.substring(0, 1).toUpperCase());
letter.setLength(0);
}
hanyupinyin.append(c);
} else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
letter.append(str);
if (str.matches("[']+") && letter.length() > 0) {
letter.append(str);
}
} else {// 否则不转换
if (letter.length() > 0) {
hanyupinyin.append(letter.substring(0, 1).toUpperCase());
letter.setLength(0);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
System.out.println("字符不能转成汉语拼音");
}
}
return hanyupinyin.toString();
}
}需要导入jar包 : pinyin4j-2.5.0.jar