我们经常将Excel格式的文件保存为csv格式以方便上传和修改,可是当数据中包含逗号和双引号的时候Excel会把该字段用双引号括住并把数据中的"改为"",从而给解析带来了困难。我写了以下函数来解析这样的字符串:
testSplitCSV.java:
import java.util.Vector;
class testSplitCSV{
/**
*Split one line of csv file
*@returna String array results
*/
public static String[] splitCSV(String src)throws Exception{
if (src==null || src.equals("")) returnnewString[0];
StringBuffer st=new StringBuffer();
Vector result=new Vector();
booleanbeginWithQuote = false;
for(int i=0;i<src.length();i++){
char ch= src.charAt(i);
if (ch=='\"'){
if (beginWithQuote){
i++;
if (i>=src.length()){
result.addElement(st.toString());
st=new StringBuffer();
beginWithQuote=false;
}else{
ch=src.charAt(i);
if (ch == '\"'){
st.append(ch);
}else if (ch ==','){
result.addElement(st.toString());
st=new StringBuffer();
beginWithQuote =false;
}else{
throw new Exception("Singledouble-quote char mustn't existin filed "+(result.size()+1)+" while itis begined withquote\ncharat:"+i);
}
}
}else if (st.length()==0){
beginWithQuote =true;
}else{
throw new Exception("Quote cannot exist in a filed which doesn't begin with quote!\nfield:"+(result.size()+1));
}
}else if (ch==','){
if (beginWithQuote){
st.append(ch);
}else{
result.addElement(st.toString());
st=new StringBuffer();
beginWithQuote =false;
}
}else{
st.append(ch);
}
}
if (st.length()!=0){
if (beginWithQuote){
throw new Exception("last field is begin with but not end with double quote");
}else{
result.addElement(st.toString());
}
}
Stringrs[] = new String[result.size()];
for (int i=0;i<rs.length;i++){
rs[i]=(String)result.elementAt(i);
}
returnrs;
}
public static void main(String[] args){
String src1= "\"fh,zg\",sdf,\"asfs,\",\",dsdf\",\"aadf\"\"\",\"\"\"hdfg\",\"fgh\"\"dgnh\",hgfg'dfh,\"asdfa\"\"\"\"\",\"\"\"\"\"fgjhg\",\"gfhg\"\"\"\"hb\"";
try {
String[] Ret = splitCSV(src1);
for (int i=0;i<Ret.length;i++){
System.out.println(i+": "+Ret[i]);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
csv_parser 国家数字图书馆项目的CSV解析器。 它使用OpenCSV(一个开放源代码库),并以NDL元数据所需的格式生成XML文件。 目前,这仅适用于电子图书馆口语教程。 我们计划将其进一步扩展到其他CSV格式。要求: 1....
解析器接受一些 csv 输入并使用函数构造提取域对象,并尝试尽可能通用。 记者试图回答有关该数据的几个业务问题。 如果你想阅读一些关于使用 Java 8 流 api 来实现这个应用程序的解释和想法,让我们看看。
CSV, XML, JSON 以及简单算术表达式解析工具库 ||通过反射实现镜像对象封装库 ||将 JSON Swift转换为 Model(Swift, Java, OC) ||Swift 版 Lo-Dash (或 underscore )函数式工具库 ||Protocol Buffers 的 Swift 语言...
该项目完全用Java构建,可以将csv文件中的数据读取到库中,并具有维护库的几种功能。 开设了一年级。 语言特征 使用Enums进行解析( GroupCmd & RemoveCmd )增强了松耦合和类型安全性。 使用Enums作为数据顺序...
Csv.java :包含针对所有CSV文件的解析方法,尤其是instacart数据中的解析方法。 Arango.java :它具有基本的ArangoDB函数,用于为instacart数据构建图形。 (例如newDatabase,createNode,createLink,update...
古董级工具 构建工具 字节码操作 集群管理 代码分析 编译器生成工具 外部配置工具 约束满足问题求解程序 持续集成 CSV解析 数据库 数据结构 时间日期工具库 依赖注入 开发流程增强工具 分布式应用 分布式数据库 发布...
高级java笔试题 ...CSV, XML, JSON 以及简单算术表达式解析工具库 通过反射实现镜像对象封装库 将 JSON Swift转换为 Model(Swift, Java, OC) Swift 版 Lo-Dash (或 underscore )函数式工具库 Protocol
调用java源码JSON到CSV 它包含两个文件,第一个是解析JSON的java .jar文件(如果您不给它输入参数,它会处理默认为我的Facebook API剩余URL的错误处理)。 .bat批处理文件应与.jar和excel文件保存在同一文件夹中。 ....
- 将浏览器指向: - 在 html 表单中输入测试参数并按下提交按钮 - 生成的类似 adf 的 xml post 请求将被转发到 Web 服务 - 它将解析 xml 请求并创建 ADF 类(所有检查都将在构造函数中应用) - 调用 ADF 对象的方法...
解析CSV文件... 213 第6章:打造高效正则表达式.... 221 典型示例... 222 稍加修改——先迈最好使的腿... 223 效率vs准确性... 223 继续前进——限制匹配优先的作用范围... 225 实测... 226 全面考查回溯......
R 代码(do.R 中的主要函数)将使用来自斯坦福的 Java 解析数据的输出。 然后,它将过滤数据并通过共享审阅者生成与其他电影相关的电影的双向投影。 一旦 do.R 主函数完成,您就可以运行 .Rmd 来生成报告的附录。
硝基(MacAfee), 希腊, CSV,解析模拟(能够在json日志上模拟多个预设grok模式) 转换:添加csv查找,添加字段,添加地理定位,大写,删除字段,格式布尔值,格式日期,格式双,格式电子邮件,格式地理点,格式...
该算法将记录的数据集(以CSV格式)和“ MatcherMerger”类作为输入,该类实现用于匹配和合并记录对的函数,并返回已解析记录的数据集。 提供产品记录的样本数据集,以及一个简单的MatcherMerger实现作为示例(在/...
我正在寻找一种轻量级的解决方案,可以避免使用纯格式(如 TSV 或 CSV)。 这个小型库在不使用任何外部绑定的情况下完成解析 ARFF 文件格式的艰苦工作。 请记住,缺少某些功能,但可以通过克隆 git 存储库并发送...
5.1 利用NumPy和pandas对CSV文件进行写操作 110 5.2 NumPy.npy与pandas DataFrame 112 5.3 使用PyTables存储数据 115 5.4 Pandas DataFrame与HDF5仓库之间的读写操作 118 5.5 使用pandas读写Excel文件 120 5.6 ...
技术点18 输入和输出格式为CSV 的文件 3.4.2 output committing 的重要性 3.5 本章小结 第3 部分 大数据模式 4 处理大数据的MapReduce 模式 4.1 Join 4.1.1 Repartition Join 技术点19 优化...
技术点16 使用Thrift3.3.5 Avro技术点17 MapReduce 的下一代数据序列化技术3.4 自定义文件格式3.4.1 输入输出格式技术点18 输入和输出格式为CSV 的文件3.4.2 output committing 的重要性 3.5 本章小...
用户日志解析器该应用程序从用户导航数据中提取首选项(或信号),以在Apache ... 基于Apache Mahout的推荐器从基本文件(例如signals.csv)和同一文件夹中名称与基本文件以相同方式开头的其他文件(例如signals-201
8.2.2. 修改货币格式 8.2.3. Zend_Currency 的信息方法 8.2.4. 设置新缺省值 8.2.5. 加速 Zend_Currency 8.3. 从前面的版本迁移 8.3.1. 从 1.0.2 到 1.0.3 或更新的迁移 9. Zend_Date 9.1. Introduction ...
支持静态链接其它编程语言(如C/C++、汇编等)编译生成的静态库(.LIB或.OBJ),但仅限于COFF格式,支持cdecl和stdcall两种函数调用约定。 使用说明如下:函数声明和调用方法与DLL命令一致;“库文件名”以.lib...