java实现Excel文件解析----apache  POI以及把汉字转化为拼音

1、POI简介
Apache POI是Apache软件基金会的开放源码函式库,POI提供给Java程序对Microsoft Office格式档案读和写的工程。
Apache POI的官网地址是:http://poi.apache.org/  你可以去里面查api来实现不同文件的解析,我这里只介绍实现Excel文件的解析。
2、实现Excel文件解析。
我的Excel文件内容为:
(1)、导包
(2)、编写代码
工具类 工具类是把汉字解析为拼音
package com.haha.utils;import java.util.Arrays;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 PinYin4jUtils {/*** 将字符串转换成拼音数组* * @param src* @return*/public static String[] stringToPinyin(String src) {return stringToPinyin(src, false, null);}/*** 将字符串转换成拼音数组* * @param src* @return*/public static String[] stringToPinyin(String src, String separator) {return stringToPinyin(src, true, separator);}/*** 将字符串转换成拼音数组* * @param src* @param isPolyphone*            是否查出多音字的所有拼音* @param separator*            多音字拼音之间的分隔符* @return*/public static String[] stringToPinyin(String src, boolean isPolyphone,String separator) {// 判断字符串是否为空if ("".equals(src) || null == src) {return null;}char[] srcChar = src.toCharArray();int srcCount = srcChar.length;String[] srcStr = new String[srcCount];for (int i = 0; i < srcCount; i++) {srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);}return srcStr;}/*** 将单个字符转换成拼音* * @param src* @return*/public static String charToPinyin(char src, boolean isPolyphone,String separator) {// 创建汉语拼音处理类HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();// 输出设置,大小写,音标方式defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);StringBuffer tempPinying = new StringBuffer();// 如果是中文if (src > 128) {try {// 转换得出结果String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,defaultFormat);// 是否查出多音字,默认是查出多音字的第一个字符if (isPolyphone && null != separator) {for (int i = 0; i < strs.length; i++) {tempPinying.append(strs[i]);if (strs.length != (i + 1)) {// 多音字之间用特殊符号间隔起来tempPinying.append(separator);}}} else {tempPinying.append(strs[0]);}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}} else {tempPinying.append(src);}return tempPinying.toString();}public static String hanziToPinyin(String hanzi) {return hanziToPinyin(hanzi, " ");}/*** 将汉字转换成拼音* * @param hanzi* @param separator* @return*/public static String hanziToPinyin(String hanzi, String separator) {// 创建汉语拼音处理类HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();// 输出设置,大小写,音标方式defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);String pinyingStr = "";try {pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat,separator);} catch (BadHanyuPinyinOutputFormatCombination e) {// TODO Auto-generated catch blocke.printStackTrace();}return pinyingStr;}/*** 将字符串数组转换成字符串* * @param str* @param separator*            各个字符串之间的分隔符* @return*/public static String stringArrayToString(String[] str, String separator) {StringBuffer sb = new StringBuffer();for (int i = 0; i < str.length; i++) {sb.append(str[i]);if (str.length != (i + 1)) {sb.append(separator);}}return sb.toString();}/*** 简单的将各个字符数组之间连接起来* * @param str* @return*/public static String stringArrayToString(String[] str) {return stringArrayToString(str, "");}/*** 将字符数组转换成字符串* * @param str* @param separator*            各个字符串之间的分隔符* @return*/public static String charArrayToString(char[] ch, String separator) {StringBuffer sb = new StringBuffer();for (int i = 0; i < ch.length; i++) {sb.append(ch[i]);if (ch.length != (i + 1)) {sb.append(separator);}}return sb.toString();}/*** 将字符数组转换成字符串* * @param str* @return*/public static String charArrayToString(char[] ch) {return charArrayToString(ch, " ");}/*** 取汉字的首字母* * @param src* @param isCapital*            是否是大写* @return*/public static char[] getHeadByChar(char src, boolean isCapital) {// 如果不是汉字直接返回if (src <= 128) {return new char[] { src };}// 获取所有的拼音String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);// 创建返回对象int polyphoneSize = pinyingStr.length;char[] headChars = new char[polyphoneSize];int i = 0;// 截取首字符for (String s : pinyingStr) {char headChar = s.charAt(0);// 首字母是否大写,默认是小写if (isCapital) {headChars[i] = Character.toUpperCase(headChar);} else {headChars[i] = headChar;}i++;}return headChars;}/*** 取汉字的首字母(默认是大写)* * @param src* @return*/public static char[] getHeadByChar(char src) {return getHeadByChar(src, true);}/*** 查找字符串首字母* * @param src* @return*/public static String[] getHeadByString(String src) {return getHeadByString(src, true);}/*** 查找字符串首字母* * @param src* @param isCapital*            是否大写* @return*/public static String[] getHeadByString(String src, boolean isCapital) {return getHeadByString(src, isCapital, null);}/*** 查找字符串首字母* * @param src* @param isCapital*            是否大写* @param separator*            分隔符* @return*/public static String[] getHeadByString(String src, boolean isCapital,String separator) {char[] chars = src.toCharArray();String[] headString = new String[chars.length];int i = 0;for (char ch : chars) {char[] chs = getHeadByChar(ch, isCapital);StringBuffer sb = new StringBuffer();if (null != separator) {int j = 1;for (char ch1 : chs) {sb.append(ch1);if (j != chs.length) {sb.append(separator);}j++;}} else {sb.append(chs[0]);}headString[i] = sb.toString();i++;}return headString;}public static void main(String[] args) {// pin4j 简码 和 城市编码 String s1 = "中华人民共和国"; String[] headArray = getHeadByString(s1); // 获得每个汉字拼音首字母System.out.println(Arrays.toString(headArray));String s2 ="长城" ; System.out.println(Arrays.toString(stringToPinyin(s2,true,",")));String s3 ="长";System.out.println(Arrays.toString(stringToPinyin(s3,true,",")));}
}

解析excel文件的测试类

package com.haha.poi;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.junit.Test;import com.haha.utils.PinYin4jUtils;public class POITest {@Test//解析excelpublic void fun1() throws Exception{//获得待解析的Excel文件//得到Excel工作簿对象   HSSFWorkbook wb =new HSSFWorkbook(new FileInputStream("C:/Users/帅哥/Desktop/POI/区域导入测试数据.xls"));//取出要解析的文件中的表格,0代表取出的是sheet1表格HSSFSheet sheet = wb.getSheetAt(0); //获得表格中一共有多少行int rowcount = sheet.getLastRowNum();  //遍历并取出表格中的每一行数据for(int i = 1 ; i <= rowcount ; i ++ ){HSSFRow row = sheet.getRow(i);//获得行中每个单元格的值//short cellCount = row.getLastCellNum();String areaNum = row.getCell(0).getStringCellValue();String province = row.getCell(1).getStringCellValue();String city = row.getCell(2).getStringCellValue();String quyu = row.getCell(3).getStringCellValue();String code = row.getCell(4).getStringCellValue();//生成城市全拼String citycode = PinYin4jUtils.hanziToPinyin(city, "");//将字符串拼接为简码String[] strs = PinYin4jUtils.getHeadByString(province+city+quyu);System.out.println(areaNum+"=>"+province+"=>"+city+"=>"+quyu+"=>"+code+"=>"+citycode+"=>"+Arrays.toString(strs));}}
}

结果:

结果中的string数组可以通过StringUtils的join方法变成string字符串。

java实现Excel文件解析---apache POI以及把汉字转化为拼音相关推荐

  1. [JAVA] java读取Excel文件,Apache POI

    解析Excel的包很多,之前用的是jxl,但是jxl只能是解析Excel2003即office兼容版. 后来发现一个Apache的开源包,POI,这个可以处理xls和xlsx扩展名的Excel文件. ...

  2. java中 Excel文件解析及超大Excel文件读写

    本文主要对Excel中数据的解析和生成进行总结 前言 在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出.所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成 ...

  3. java读写excel文件poi_Java利用POI读写Excel文件工具类

    本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...

  4. [JAVA] java读取Excel文件内容,jxl(Excel 2003)

    读取Excel的另外一个开源jar包,jxl,这个之前系统中使用过,但是仅仅是解析Excel2003版的数据,无法解析更高版本的Excel文件. Apache POI可以解析Excel兼容版和高级版, ...

  5. 【Apache POI】Java写入Excel文件

    上篇文章学习了Java读取Excel文件,这篇文章接着来简单总结Java写入Excel,话不多说,看代码: import java.io.File; import java.io.FileInputS ...

  6. 【Apache POI】Java 读取Excel文件

    Excel内容如下: 封装Excel行列字段的Bean: public class Employee {private String name;private String gender;privat ...

  7. Excel文件解析性能对比(POI,easyexcel,xlsx-streamer)

    问题: 在解析excel内容时,由于用户误操作,偶尔会误录入大量空行,如果代码处置不当,进行文档内容解析时,就会占用大量时间和内存,甚至引起服务器内存消耗殆尽,导致服务无法访问,或者引起OOM. 解决 ...

  8. Java中的文件解析——Excel解析

    在日常的开发过程中,经常会使用到excel工作簿进行数据的保存,那么在java中,通常会使用第三方提供的技术来进行excel文件的解析,比如:Apache POI.JXL.Alibaba EasyEx ...

  9. java实现excel文件上传并解析内容保存到数据库中

    基于struts框架的web项目中excel文件的上传导入到数据库中的java代码 原理:将要上传的文件已流的形式传到服务器,服务器中接收到文件数据流并生成文件到服务器指定位置,java解析服务器生成 ...

最新文章

  1. 【转载】Java之什么是JIT (Just In Time)?
  2. 关于SmartForm和ScriptForm的输出格式设置说明(转载)
  3. postman自动打开_趁热打铁,一口气记录下整个postman自动化测试过程!
  4. linux内核中kset是什么意思,Linux内核之设备驱动-底层数据结构kobject/kset
  5. 怎么安装SharePoint2013 preview 在SQL2012 和 Windows Server 2008 R2 SP1
  6. wpf 使子ui元素可视区域不超过父元素_对游戏UI设计的一点思考
  7. dd命令安装Linux
  8. Application Request Route实现IIS Server Farms集群负载详解
  9. 诗与远方:无题(一)
  10. ubuntu 编译安装nginx php mysql_ubuntu下安装nginx php mysql
  11. 数据结构和算法———P1 绪论
  12. VS2012在一个解决方案中添加多个项目(工程)
  13. SpringBoot集成gRPC微服务工程搭建实践
  14. 【LINUX 学习】查看和修改主机名
  15. CSS综合征病例,ChurgStrauss 综合征 (css) 变应性嗜酸性肉芽肿课件
  16. 帝国cms添加关注公众号登录
  17. 流利阅读12.16 ‘Aquaman’ is already a box office titan
  18. 上市公司9月23日晚间公告速递
  19. 如何为SSH登录建立双因子验证机制(谷歌身份验证器)?
  20. 企业承担社会责任的必要性

热门文章

  1. 玫瑰花的折法:如何用钱折玫瑰(组图全说明)
  2. Google认证测试:CTS,CTS on GSI,VTS
  3. Android仿支付宝UI功能开发,Android类似支付宝我的界面切片
  4. 主流网络文学网站流量分析用户需求
  5. 人工智能真的能代替人类?
  6. 计算机无法设置壁纸黑屏,Win7电脑壁纸变黑屏怎么办
  7. 计算机无法打开压缩包,电脑压缩文件为什么打不开?手把手教你解决压缩文件打不开的问题...
  8. 双流机场国际航线将整体转场天府机场,双流机场广告和天府机场广告各有何优势
  9. 用代码送上 Happy New Year
  10. 【linux学习笔记】ps top 查看的静态命令和动态命令