JavaSE-汉字转拼音首字母-全拼-多音字

<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>

PinyinUtils.java

public class PinyinUtils {
// public static void main(String[] args) {
// String yin = PinyinUtils.getPingYin("缪金瑾");
// System.out.println("yin = " + yin);
//
// String san = PinyinUtils.getPingYin("单金瑾");
// System.out.println("yin = " + san);
// }
private static String path = "pinyin.properties";
/**
* 将字符串中的中文转化为拼音,英文字符不变
*
* @param inputString 姓名
* @return
*/
public static String getPingYin(String inputString) {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
String output = "";
if (inputString != null && inputString.length() > 0
&& !"null".equals(inputString)) {
String substring = diffPro(inputString);
char[] input = substring.trim().toCharArray();
try {
for (int i = 0; i < input.length; i++) {
if (java.lang.Character.toString(input[i]).matches(
"[\\u4E00-\\u9FA5]+")) {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
input[i], format);
output += temp[0]+" ";
} else{
output += java.lang.Character.toString(input[i]);
}
output = output;
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
return "";
}
output = output.toLowerCase().replace(" ", "");
return output;
}
/**
* 汉字转换位汉语拼音首字母,英文字符不变
*
* @param chines 汉字
* @return 拼音首字母
*/
public static String converterToFirstSpell(String chines) {
String pinyinName = "";
char[] nameChar = chines.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < nameChar.length; i++) {
if (nameChar[i] > 128) {
try {
pinyinName += PinyinHelper.toHanyuPinyinStringArray(
nameChar[i], defaultFormat)[0].charAt(0);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pinyinName += nameChar[i];
}
}
return pinyinName;
}
/**
* 与pinyin.properties中多音字的姓名对比
* @param inputString 中文姓名
* @return 百家姓的拼音读法
*/
private static String diffPro(String inputString){
Properties properties = new Properties();
try {
InputStream resourceAsStream = PinyinUtils.class.getClassLoader().getResourceAsStream(path);
InputStream inputStream = Objects.requireNonNull(resourceAsStream);
InputStreamReader reader = new InputStreamReader(inputStream,"utf-8");
properties.load(reader);
reader.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Set keyValue = properties.keySet();
for (Iterator it = keyValue.iterator(); it.hasNext();){
String key = (String) it.next();
if(inputString.substring(0, key.length()).equals(key)){
String value = inputString.substring(key.length(),inputString.length());
return properties.getProperty(key)+" "+value;
}
}
return inputString;
}
/**
* 获取中文全拼
*
* @param name 需要转换的中文
* @return 全拼结果
**/
public static String getFullPinyin(String name) {
// 创建格式化对象
HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
//设置大小写格式
outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//设置声调格式
outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
// 放置输入结果
StringBuilder result = new StringBuilder();
// 字符数组
char[] charArray = name.toCharArray();
// 遍历字符
for (char c : charArray) {
// 中文会被变成全拼,非中文会被直接拼接在结果字符串中
if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
String[] pinyinArray = new String[0];
try {
pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
if (pinyinArray != null) {
result.append(pinyinArray[0]);
}
} else {
result.append(c);
}
}
return result.toString();
}
/**
* 获取中文首字母
*
* @param name 需要转换的中文
* @return 首字母结果
**/
public static String getPinyinInitial(String name) {
// 创建格式化对象
HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
// 设置大小写格式
outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// 设置声调格式
outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
// 放置输入结果
StringBuilder result = new StringBuilder();
// 字符数组
char[] charArray = name.toCharArray();
// 遍历字符
for (char c : charArray) {
// 中文会被变成拼音首字母,非中文会被直接拼接在结果字符串中
if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
String[] pinyinArray = new String[0];
try {
pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat);
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
if (pinyinArray != null) {
result.append(pinyinArray[0].charAt(0));
}
} else {
result.append(c);
}
}
return result.toString();
}
}

resources/pinyin.properties

=OU
=MIAO
=CHENG
=YUE
=YUN
=YUN
=HE
=CHONG
=QIU
=BI
=XIAN
=XIE
=SHE
=SHAN
=PIAO
=ZHA
=ZHA
=GE
万俟=MO QI
尉迟=YU CHI
posted @   生生灯火半杯月  阅读(191)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示