java 导入csv , 里面 有“”回车换行等,都可以去掉
来源:互联网 发布:数据库系统设计 编辑:程序博客网 时间:2024/06/01 09:38
http://blog.csdn.net/hantiannan/article/details/6756347
真实好东西, 吧问题都解决了
package com.baishiji.action.taskmenu;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.ArrayList;public class CSVFileUtil {/** * http://blog.csdn.net/hantiannan/article/details/6756347 */ // CSV文件编码 public static final String ENCODE = "GBK"; private FileInputStream fis = null; private InputStreamReader isw = null; private BufferedReader br = null; public CSVFileUtil(String filename) throws Exception { fis = new FileInputStream(filename); isw = new InputStreamReader(fis, ENCODE); br = new BufferedReader(isw); } // ==========以下是公开方法============================= /** * 从CSV文件流中读取一个CSV行。 * * @throws Exception */ public String readLine() throws Exception { StringBuffer readLine = new StringBuffer(); boolean bReadNext = true; while (bReadNext) { // if (readLine.length() > 0) { readLine.append("\r\n"); } // 一行 String strReadLine = br.readLine(); // readLine is Null if (strReadLine == null) { return null; } readLine.append(strReadLine); // 如果双引号是奇数的时候继续读取。考虑有换行的是情况。 if (countChar(readLine.toString(), '"', 0) % 2 == 1) { bReadNext = true; } else { bReadNext = false; } } return readLine.toString(); } /** *把CSV文件的一行转换成字符串数组。指定数组长度,不够长度的部分设置为null。 */ public static String[] fromCSVLine(String source, int size) { ArrayList tmpArray = fromCSVLinetoArray(source); if (size < tmpArray.size()) { size = tmpArray.size(); } String[] rtnArray = new String[size]; tmpArray.toArray(rtnArray); return rtnArray; } /** * 把CSV文件的一行转换成字符串数组。不指定数组长度。 */ public static ArrayList fromCSVLinetoArray(String source) { if (source == null || source.length() == 0) { return new ArrayList(); } int currentPosition = 0; int maxPosition = source.length(); int nextComma = 0; ArrayList rtnArray = new ArrayList(); while (currentPosition < maxPosition) { nextComma = nextComma(source, currentPosition); rtnArray.add(nextToken(source, currentPosition, nextComma)); currentPosition = nextComma + 1; if (currentPosition == maxPosition) { rtnArray.add(""); } } return rtnArray; } /** * 把字符串类型的数组转换成一个CSV行。(输出CSV文件的时候用) */ public static String toCSVLine(String[] strArray) { if (strArray == null) { return ""; } StringBuffer cvsLine = new StringBuffer(); for (int idx = 0; idx < strArray.length; idx++) { String item = addQuote(strArray[idx]); cvsLine.append(item); if (strArray.length - 1 != idx) { cvsLine.append(','); } } return cvsLine.toString(); } /** * 字符串类型的List转换成一个CSV行。(输出CSV文件的时候用) */ public static String toCSVLine(ArrayList strArrList) { if (strArrList == null) { return ""; } String[] strArray = new String[strArrList.size()]; for (int idx = 0; idx < strArrList.size(); idx++) { strArray[idx] = (String) strArrList.get(idx); } return toCSVLine(strArray); } // ==========以下是内部使用的方法============================= /** *计算指定文字的个数。 * * @param str 文字列 * @param c 文字 * @param start 开始位置 * @return 个数 */ private int countChar(String str, char c, int start) { int i = 0; int index = str.indexOf(c, start); return index == -1 ? i : countChar(str, c, index + 1) + 1; } /** * 查询下一个逗号的位置。 * * @param source 文字列 * @param st 检索开始位置 * @return 下一个逗号的位置。 */ private static int nextComma(String source, int st) { int maxPosition = source.length(); boolean inquote = false; while (st < maxPosition) { char ch = source.charAt(st); if (!inquote && ch == ',') { break; } else if ('"' == ch) { inquote = !inquote; } st++; } return st; } /** * 取得下一个字符串 */ private static String nextToken(String source, int st, int nextComma) { StringBuffer strb = new StringBuffer(); int next = st; while (next < nextComma) { char ch = source.charAt(next++); if (ch == '"') { if ((st + 1 < next && next < nextComma) && (source.charAt(next) == '"')) { strb.append(ch); next++; } } else { strb.append(ch); } } return strb.toString(); } /** * 在字符串的外侧加双引号。如果该字符串的内部有双引号的话,把"转换成""。 * * @param item 字符串 * @return 处理过的字符串 */ private static String addQuote(String item) { if (item == null || item.length() == 0) { return "\"\""; } StringBuffer sb = new StringBuffer(); sb.append('"'); for (int idx = 0; idx < item.length(); idx++) { char ch = item.charAt(idx); if ('"' == ch) { sb.append("\"\""); } else { sb.append(ch); } } sb.append('"'); return sb.toString(); }}
阅读全文
0 0
- java 导入csv , 里面 有“”回车换行等,都可以去掉
- Java 去掉字符串中的换行符回车符等
- JAVA中去掉空格换行符回车等
- java里去掉回车换行符
- jQuery去掉回车换行
- textarea去掉回车换行
- 去掉字符串前后的回车、换行、空格、制表等字符
- 去掉空格去掉回车换行
- java 去掉换行符等特殊字符
- 去掉回车和换行js
- js 去掉空格.回车.换行
- js去掉空格回车换行
- js 去掉空格.回车.换行
- 去掉注释换行等
- java过滤字符串中的空格、回车、换行符、制表符等
- oracle中去掉文本中的换行符、回车符、制表符等特殊字符
- java回车换行说明
- java 回车换行学习
- gulp配置文件
- 细说mysql索引
- 观察者模式和委托
- TensorFlow: How to freeze a model and serve it with a python API
- 安卓开发中,onSaveInstanceState和onRestoreInstanceState,调用时机分析
- java 导入csv , 里面 有“”回车换行等,都可以去掉
- webstorm中.vue格式文件中代码高亮显示
- 注释转换
- Apache优化(一)
- 实现像UGUI中Button一样可以拖拽绑定事件
- PHP获取文件扩展名
- 分布式第二章 单机存储系统
- TP框架复合查询条件
- 学习总结5