java将中文转为拼音
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();}}}}//mainpublic 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将中文转为拼音相关推荐
- java实现汉字转为拼音
java实现汉字转为拼音: 1.需要导入pinyin4j.jar package com.loo.pinyin; import net.sourceforge.pinyin4j.PinyinHelpe ...
- php怎么把中文转,PHP如何将中文转为拼音?
PHP如何将中文转为拼音? 首先使用Composer安装"overtrue/pinyin"拓展:composer require overtrue/pinyin 然后引入Pinyi ...
- php实现拼音转中文,PHP如何将中文转为拼音?
PHP如何将中文转为拼音? 首先使用Composer安装"overtrue/pinyin"拓展:composer require overtrue/pinyin 然后引入Pinyi ...
- 【Python】pinyin模块将中文转为拼音
[Python]pinyin模块将中文转为拼音 示例代码 示例代码 可以看到数据不是很规范,城市名称既有中文又有英文,而且上海被存储为ShangHai和Shanghai. 对于上海的问题,我们将拼音全 ...
- Java 汉字拆分转为拼音 及根据经纬度获取所在位置
Java 汉字拆分转为拼音 及根据经纬度获取所在位置 java网络代码拼凑人 package com.ruoyi.hfiveinterface.util;import com.alibaba.fast ...
- 将字符串中的中文转为拼音(java)
maven依赖 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</ ...
- PinYin4j的基本使用 Java获取中文转拼音、获取中文拼音的首字母缩写
前言 在实际开发中,可能会遇到根据用户输入的中文拼音首字母缩写,来查询对应数据的功能需求,本文将提供一个操作中文转拼音.获取拼音首字母的工具类CV即用. 一.PinYin4j 简介 : pinyin4 ...
- 一款好用的基于 Java 的中文转拼音工具
目录 pinyin 主要的功能 主要的方法 功能测试 工具源地址 pinyin pinyinhttps://github.com/houbb/pinyin pinyin 是 java 实现 ...
- Java获取中文汉字拼音首字母方法二
效果如下 岐山县 qishanxian QSX Java代码 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge. ...
最新文章
- 解释型语言与编译型语言的区别
- 呆错网址导航系统V1.13.18 PHP源码
- 【编程好习惯】避免使用魔数
- 【elasticsearch】Elasticsearch : alias数据类型
- Direct2D处理几何图形之间的碰撞检测(下)
- jquery操作表格
- SVN 无法连接主机:由于目标计算机积极拒绝,无法连接
- novell.directory.ldap获取邮箱活动目录
- Waveform Audio 驱动(Wavedev2)之:WAV API模拟 1
- 软件测试之测试用例和缺陷报告模板分享
- oa系统服务器数据库,oa办公系统带数据库
- matlab语法 axis on,matlabaxis
- php保存pdf旋转90度,如何将PDF图片旋转90度,盘点这个小方法
- sap设置默认登录语言
- FS5175AESOP8多串锂电池同步降压充电IC
- 知网计算机论文查重查代码,知网查重会查代码么?
- 怎么调用计算机任务管理器,任务管理器怎么打开
- 【教你如何用驱动人生解决驱动问题】
- mongo数据库集合导出
- 与前端新人一起学魔法 Day02 HTML基础(二)