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将中文转为拼音相关推荐

  1. java实现汉字转为拼音

    java实现汉字转为拼音: 1.需要导入pinyin4j.jar package com.loo.pinyin; import net.sourceforge.pinyin4j.PinyinHelpe ...

  2. php怎么把中文转,PHP如何将中文转为拼音?

    PHP如何将中文转为拼音? 首先使用Composer安装"overtrue/pinyin"拓展:composer require overtrue/pinyin 然后引入Pinyi ...

  3. php实现拼音转中文,PHP如何将中文转为拼音?

    PHP如何将中文转为拼音? 首先使用Composer安装"overtrue/pinyin"拓展:composer require overtrue/pinyin 然后引入Pinyi ...

  4. 【Python】pinyin模块将中文转为拼音

    [Python]pinyin模块将中文转为拼音 示例代码 示例代码 可以看到数据不是很规范,城市名称既有中文又有英文,而且上海被存储为ShangHai和Shanghai. 对于上海的问题,我们将拼音全 ...

  5. Java 汉字拆分转为拼音 及根据经纬度获取所在位置

    Java 汉字拆分转为拼音 及根据经纬度获取所在位置 java网络代码拼凑人 package com.ruoyi.hfiveinterface.util;import com.alibaba.fast ...

  6. 将字符串中的中文转为拼音(java)

    maven依赖 <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</ ...

  7. PinYin4j的基本使用 Java获取中文转拼音、获取中文拼音的首字母缩写

    前言 在实际开发中,可能会遇到根据用户输入的中文拼音首字母缩写,来查询对应数据的功能需求,本文将提供一个操作中文转拼音.获取拼音首字母的工具类CV即用. 一.PinYin4j 简介 : pinyin4 ...

  8. 一款好用的基于 Java 的中文转拼音工具

    目录 pinyin 主要的功能​​​​​​ 主要的方法 功能测试 工具源地址 pinyin pinyinhttps://github.com/houbb/pinyin pinyin 是 java 实现 ...

  9. Java获取中文汉字拼音首字母方法二

    效果如下 岐山县 qishanxian QSX Java代码 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge. ...

最新文章

  1. 解释型语言与编译型语言的区别
  2. 呆错网址导航系统V1.13.18 PHP源码
  3. 【编程好习惯】避免使用魔数
  4. 【elasticsearch】Elasticsearch : alias数据类型
  5. Direct2D处理几何图形之间的碰撞检测(下)
  6. jquery操作表格
  7. SVN 无法连接主机:由于目标计算机积极拒绝,无法连接
  8. novell.directory.ldap获取邮箱活动目录
  9. Waveform Audio 驱动(Wavedev2)之:WAV API模拟 1
  10. 软件测试之测试用例和缺陷报告模板分享
  11. oa系统服务器数据库,oa办公系统带数据库
  12. matlab语法 axis on,matlabaxis
  13. php保存pdf旋转90度,如何将PDF图片旋转90度,盘点这个小方法
  14. sap设置默认登录语言
  15. FS5175AESOP8多串锂电池同步降压充电IC
  16. 知网计算机论文查重查代码,知网查重会查代码么?
  17. 怎么调用计算机任务管理器,任务管理器怎么打开
  18. 【教你如何用驱动人生解决驱动问题】
  19. mongo数据库集合导出
  20. 与前端新人一起学魔法 Day02 HTML基础(二)

热门文章

  1. ubuntu系统中查看本机cpu和内存信息的命令和用法(分色排版)
  2. 用阻塞队列LinkedBlockingQueue实现生产者消费者先进先出
  3. 网络嗅探之一 --- 原理篇
  4. oa项目环境搭建的操作步骤详解
  5. 33个与众不同的Web表单设计
  6. php的表达爱意的一句代码,含蓄表达爱意的爱情诗句(70条)
  7. 阿里云服务器绑定域名、esc绑定域名、域名备案
  8. 笑出腹肌!程序员从不撒谎,但注释却会!
  9. python新手有手就会的100个代码
  10. Acrel-3000在青岛中冶圣乔维斯南区智能住宅小区的应用