java将中文转为拼音
项目需求,需要将一批工号批量入库,但产品经理提供的却是中文……没办法,只好用程序转了。
做法是将人名保存为文本文件,每行一个。并且采用pinyin4j包进行转换,值得提的是pinyin4j对多音字特别是姓氏转换不是特别准确,因此遇到多音字姓氏就需要自行判断并转换了。再者,由于同名的原因,为了区分姓名中还参杂着阿拉伯数字,因此在判断时还要加以区分。
// 中文转拼音
Maple
// An highlighted block
/*
程序目的:将中文转换为拼音
程序版本:JDK13
程序编写:枫叶
编写时间:2020年3月2日
*/
package org.translation;
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;
public class ChineseToPinYin
{
public static String PROVINCE = "GuangXi";
//接收外部传进的参数方法
public String getChineseWord(String words)
{
String tranWord = translateToPinYin(words);
return tranWord;
}
//中文转换为拼音
private String translateToPinYin(String words)
{
String pinYin = "";
String name = "";
//中文转换成拼音
char[] singleWord = words.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
int flag = 0;
String regex = "[\u4E00-\u9FA5]+"; //定义中文字符的unicode范围
for(int i=0;i<singleWord.length;i++)
{
////判断是否为中文字符
if(!String.valueOf(singleWord[i]).matches(regex))
{
pinYin += singleWord[i];
}
else
{
try {
flag++;
// System.out.println("flag:"+flag);
if ((String.valueOf(singleWord[i]).equals("覃")) && (flag == 1)) {
pinYin += firstNamePin(String.valueOf(singleWord[i]));
flag = 0;
} else if ((String.valueOf(singleWord[i]).equals("区")) && (flag == 1)) {
pinYin += firstNamePin(String.valueOf(singleWord[i]));
flag = 0;
} else if ((String.valueOf(singleWord[i]).equals("牟")) && (flag == 1)) {
pinYin += firstNamePin(String.valueOf(singleWord[i]));
flag = 0;
} else if ((String.valueOf(singleWord[i]).equals("单")) && (flag == 1)) {
pinYin += firstNamePin(String.valueOf(singleWord[i]));
flag = 0;
} else {
name = convertFisrtToBig(
PinyinHelper.toHanyuPinyinStringArray(singleWord[i], defaultFormat)[0]);
pinYin += name;
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}
}
return words+"|"+PROVINCE+pinYin;
}
//首字母转为大写方法
public static String convertFisrtToBig(String str)
{
String first = str.substring(0,1).toUpperCase();
String after = str.substring(1).toLowerCase();
return first+after;
}
//多音字解决方法,尤其是姓氏
public static String firstNamePin(String name)
{
String n = "";
if(name.equals("覃"))
{
n = "Qin";
}
else if(name.equals("区"))
{
n = "Ou";
}
else if(name.equals("牟"))
{
n = "Mu";
}
else if(name.equals("单"))
{
n = "Shan";
}
return n;
}
}
// 中文转拼音
Maple
// An highlighted block
/*
* 程序目的:从文本文件中获取中文后转换成拼音,并且首字母大写,同时将转换好的数据保存入文本文件
* 程序版本:JDK13
* 程序编写:枫叶
* 编写时间:2020年3月2日
*/
package org.translation;
import java.io.*;
import java.util.Date;
import java.text.SimpleDateFormat;
public class GetDataFromFile
{
public static String CHARSET = "UTF8";
//对外接口方法
public void getFileName(String fileName)
{
fetchDataFromTxt(fileName);
}
//读取文本文件中的数据
private void fetchDataFromTxt(String fileName)
{
ChineseToPinYin ctpy = new ChineseToPinYin();
File f = new File(fileName);
InputStreamReader reader = null;
BufferedReader br = null;
BufferedWriter bw = null;
String line = "";
String reStr = "";
int counter = 0;
//定义写入文件的文件名
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String wFileName = "PinYin"+df.format(new Date())+".txt";
try
{
reader = new InputStreamReader(new FileInputStream(f), CHARSET);
br = new BufferedReader(reader);
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(wFileName,true), CHARSET));
while((line=br.readLine())!=null)
{
counter++;
reStr = ctpy.getChineseWord(line);
bw.write(reStr);
bw.newLine();
bw.flush();
System.out.println(reStr);
}
System.out.println("共读取"+counter+"条记录");
System.out.println("保存文件成功...");
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
if(br!=null)
{
try
{
br.close();
System.out.println("已关闭缓冲流...");
}
catch(IOException e)
{
e.printStackTrace();
}
}
if(reader!=null)
{
try
{
reader.close();
System.out.println("已关闭输入流...");
}
catch(IOException e)
{
e.printStackTrace();
}
}
if(bw!=null)
{
try
{
bw.close();
System.out.println("已关闭写入流...");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
//main
public static void main(String args[])
{
System.out.println("---------本程序用于将中文转换为拼音字母---------");
String fileName = "userName.txt";
//定义开始时间
long startTime = new Date().getTime();
new GetDataFromFile().getFileName(fileName);
//定义结束时间
long finishTime = new Date().getTime();
System.out.println("本次运行时间为"+(finishTime-startTime)/1000+"秒" );
}
}
本文介绍了如何使用Java进行中文字符转换成对应的拼音,包括转换的方法和相关库的使用,适用于需要处理中文字符串拼音化的场景。

4300

被折叠的 条评论
为什么被折叠?



