版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29329521/article/details/81302643
本方法通过pinyin4j这个工具包来实现。
主要流程为先将字符串转换为char[]数组,再循环判断字符是否是汉字,这一步主要使用汉字Unicode编码进行匹配,是汉字则调用pinyin4j中的汉字转拼音接口,不是汉字则不转换,最终将数组遍历完后,把得到的结果拼接,即转换完成。
获取首字母,只需在每次遍历中,取转换结果的首位字符拼接即可。
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;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ChineseUtils {
private static final String CHINESE_PATTERN = "[\u4e00-\u9fa5]";
private static Logger logger = LoggerFactory.getLogger(ChineseUtils.class);
/**
* 汉字转换位汉语拼音首字母,英文字符不变
*
* @param chinese 汉字
* @return 拼音
*/
public static String convertChineseToFirstSpell(String chinese) {
String pinyinName = "";
char[] nameChar = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < nameChar.length; i++) {
if (Pattern.matches(CHINESE_PATTERN, nameChar[i]+"")) {
try {
pinyinName += PinyinHelper.toHanyuPinyinStringArray(
nameChar[i], defaultFormat)[0].charAt(0);
} catch (BadHanyuPinyinOutputFormatCombination e) {
logger.error("文字转拼音失败"+e);
}
} else {
pinyinName += nameChar[i];
}
}
return pinyinName;
}
/**
* 汉字转换成汉语拼音全拼,英文字符不变
* @author you chou
* @param chinese 汉字
* @return 拼音
*/
public static String convertChineseToFullSpell(String chinese) {
String pinyinName = "";
char[] nameChar = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
for (int i = 0; i < nameChar.length; i++) {
if (Pattern.matches(CHINESE_PATTERN, nameChar[i]+"")) {
try {
pinyinName += PinyinHelper.toHanyuPinyinStringArray(
nameChar[i], defaultFormat)[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
logger.error("文字转拼音失败"+e);
}
} else {
pinyinName += nameChar[i];
}
}
return pinyinName;
}
public static void main(String[] args) {
System.out.println(convertChineseToFirstSpell("123qw广东省深圳市"));
System.out.println(convertChineseToFullSpell("123qw广东省深圳市"));
}
}