Java ArrayList元素超出错误 java.lang.ArrayIndexOutOfBoundsException: 2
我写了一个小程序把txt里的数据按行读取,因为每行都是String\tString\tString的格式所以用\t分割存储到Arraylist里面,再把想要的部分写到一个...
我写了一个小程序把txt里的数据按行读取,因为每行都是 String \t String \t String的格式所以用 \t分割存储到Arraylist里面, 再把想要的部分写到一个新的文件里 代码大概如下
public static void main(String args[])throws Exception{
BufferedReader read = new BufferedReader(new InputStreamReader
(new FileInputStream("C:/a.txt"));
String str = null;
List<String[]> list = new ArrayList<String[]>();
while((str = read.readLine()) != null){
list.add(str.toLowerCase().split("\\u0009"));
}
read.close();
FileOutputStream out = new FileOutputStream("C:/b.txt",true);
for(int i = 0;i < list.size();i++){
String t[] = list.get(i);
out.write((t[1]+"\t"+t[2]+"\r\n").getBytes());
}
out.close();
}
不知道Arraylist是那地方出错了,还望各位大神帮我看看,万分感谢了! 展开
public static void main(String args[])throws Exception{
BufferedReader read = new BufferedReader(new InputStreamReader
(new FileInputStream("C:/a.txt"));
String str = null;
List<String[]> list = new ArrayList<String[]>();
while((str = read.readLine()) != null){
list.add(str.toLowerCase().split("\\u0009"));
}
read.close();
FileOutputStream out = new FileOutputStream("C:/b.txt",true);
for(int i = 0;i < list.size();i++){
String t[] = list.get(i);
out.write((t[1]+"\t"+t[2]+"\r\n").getBytes());
}
out.close();
}
不知道Arraylist是那地方出错了,还望各位大神帮我看看,万分感谢了! 展开
3个回答
展开全部
要保证你的a.txt的每一行的内容都有两个\t,这样list里的每个数组的lang最少都是3。这样
for(int i = 0;i < list.size();i++){
String t[] = list.get(i);
out.write((t[1]+"\t"+t[2]+"\r\n").getBytes());
}
中的 t[2] 就不会报错
for(int i = 0;i < list.size();i++){
String t[] = list.get(i);
out.write((t[1]+"\t"+t[2]+"\r\n").getBytes());
}
中的 t[2] 就不会报错
追问
能不能在定义的时候定义arraylist的容器数量呢,用代码的话怎么把它定义成三个呢,谢谢谢谢
追答
不能,list的长度是可变的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、写入第二个文件的时候为什么要用t[1] , t[2] 注意数组的下表都是从0开始的。
2、检查下你的a.txt是不是每行都有三个元素(如果上面1是你故意写的话则t[2]代表第三个元素),否则检查是否有2个元素。
2、检查下你的a.txt是不是每行都有三个元素(如果上面1是你故意写的话则t[2]代表第三个元素),否则检查是否有2个元素。
追问
确实有两个元素的情况这样的话应该怎么处理呢
追答
加数组length长度的条件判断,代码中尽量不要直接用t[1],t[2]这种比较直接的东西可以类似于这样
for(int i = 0;i < list.size();i++){
String t[] = list.get(i);
StringBuilder sb = new StringBuilder();
for(int j=1 ; j<t.length ; j++)
{
sb.append(t[j]);
if(j!= t.length-1){
sb.append("\t");
}
}
sb.append("\r\n");
out.write(sb.toString().getBytes()); }
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(int i = 0;i < list.size();i++){
String t[] = list.get(i);
out.write((t[1]+"\t"+t[2]+"\r\n").getBytes());
}
out.close();
感觉是这里,t的下标是从0开始的,报的错误时数组的下标越界,你改下看看
String t[] = list.get(i);
out.write((t[1]+"\t"+t[2]+"\r\n").getBytes());
}
out.close();
感觉是这里,t的下标是从0开始的,报的错误时数组的下标越界,你改下看看
追问
如果是0, 1的话报错是 1
因为原文每行是用两个 \t 分成了3部分,我想要的是后面两个部分,所以就想要0,1,2 中的 1和2两部分,不知道这个逻辑对不对,因为刚接触所以可能会有些混乱,还望包涵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询