解析csv格式的java函数

博客指出将Excel文件保存为CSV格式时,若数据含逗号和双引号,Excel处理会给解析带来困难。为此给出了用Java编写的解析函数,通过对字符串的逐字符处理,实现对含特殊字符的CSV字符串的解析,并给出了测试代码。

我们经常将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();
}
}
}

内容概要:本文围绕六自由度机械臂的人工神经网络(ANN)设计展开,重点研究了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程,并通过Matlab代码实现相关算法。文章结合理论推导与仿真实践,利用人工神经网络对复杂的非线性关系进行建模与逼近,提升机械臂运动控制的精度与效率。同时涵盖了路径规划中的RRT算法与B样条优化方法,形成从运动学到动力学再到轨迹优化的完整技术链条。; 适合人群:具备一定机器人学、自动控制理论基础,熟悉Matlab编程,从事智能控制、机器人控制、运动学六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)建模等相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握机械臂正/逆运动学的数学建模与ANN求解方法;②理解拉格朗日-欧拉法在动力学建模中的应用;③实现基于神经网络的动力学补偿与高精度轨迹跟踪控制;④结合RRT与B样条完成平滑路径规划与优化。; 阅读建议:建议读者结合Matlab代码动手实践,先从运动学建模入手,逐步深入动力学分析与神经网络训练,注重理论推导与仿真实验的结合,以充分理解机械臂控制系统的设计流程与优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值