我有一个.csv文件,其中包含以下格式的条目: -
question,option1,option2,option3,option4,answer
我想阅读此.csv文件并在表格中插入数据。 我正在使用string.split方法执行此操作,它工作正常 例如: -
String a="hi,a,b,c,d,e";
String[] b=a.split(",");
output is:-
b[0]=hi
b[1]=a
b[2]=b
b[3]=c
b[4]=d
b[5]=e
但是当我在两者之间使用空间时,它会给我一个错误: 例如: -
String a="hi how are you,a,b,c,d,e";
String[] b=a.split(",");
我在servlet中使用这个概念,它将值存储在数据库中。 这是servlet代码: -
File file=new File(path2);
Scanner inputstream=new Scanner(file);
while(inputstream.hasNext()){
String data=inputstream.next();
String[] val=data.split(",");
String sql4="insert into "+name+"(question,option1,option2,option3,option4,answer) values('"+val[0]+"','"+val[1]+"','"+val[2]+"','"+val[3]+"','"+val[4]+"','"+val[5]+"')";
s.execute(sql4);
}
我的数组索引超出了绑定异常。
请帮忙。
三江源。 :)
答案 0 :(得分:2)
默认情况下,space
是分隔符之一。这使得你有大量的小数组而不是具有5个元素的数组。因此,如果您假设每行包含5个元素,那么您的ArrayOutOfBounds。
像这样指定分隔符:
Scanner inputstream=new Scanner(file);
inputstream.useDelimiter("\n");
编辑:此代码显示默认分隔符:
Scanner inputstream=new Scanner(file);
System.out.println("Delimiter : "+inputstream.delimiter().toString());
输出:
\p{javaWhitespace}+
这包括(根据Character#isWhiteSpace(char ch)的javadoc):
答案 1 :(得分:1)
试试这段代码,
File file = new File(path2);
String data = new Scanner(file).useDelimiter("\\A").next();
String[] val = data.split(",");
String sql4 = "insert into " + name + "(question,option1,option2,option3,option4,answer) values('" + val[0] + "','" + val[1] + "','" + val[2] + "','"
+ val[3] + "','" + val[4] + "','" + val[5] + "')";
s.execute(sql4);
如果要迭代流,则应在完全读取流后拆分字符串。因为您可能还没有完整数据,因此在每个周期中拆分它可能不会产生相同的输出。
有关使用scanner类转换为字符串的更多说明 - Stupid Scanner Tricks
答案 2 :(得分:0)
我看不出错误在哪里。它将您作为参数(',')传递的分隔符进行搜索,因此它将您的字符串拆分为:
b[0]=hi how are you
b[1]=a
b[2]=b
b[3]=c
b[4]=d
b[5]=e
答案 3 :(得分:0)
代码似乎没有问题。最有可能是您的CSV文件。
另外,让我做一个非常愚蠢的猜测,并确认在以CSV格式更改测试用例时,您不是用空格替换逗号,是吗......!?
我知道我正在做一个非常愚蠢的猜测,但相信我,我已经做了非常愚蠢的事情而且我只能责怪它:D
P.S:我假设您手动更改CSV中的数据'一次'。如果不是这样,请忽略。