Java ArrayList元素超出错误 java.lang.ArrayIndexOutOfBoundsException: 2

我写了一个小程序把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是那地方出错了,还望各位大神帮我看看,万分感谢了!

第1个回答  2014-09-01
要保证你的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] 就不会报错追问

能不能在定义的时候定义arraylist的容器数量呢,用代码的话怎么把它定义成三个呢,谢谢谢谢

追答

不能,list的长度是可变的

第2个回答  2014-09-01
1、写入第二个文件的时候为什么要用t[1] , t[2] 注意数组的下表都是从0开始的。
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()); }

本回答被提问者采纳
第3个回答  2014-09-01
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开始的,报的错误时数组的下标越界,你改下看看追问

如果是0, 1的话报错是 1
因为原文每行是用两个 \t 分成了3部分,我想要的是后面两个部分,所以就想要0,1,2 中的 1和2两部分,不知道这个逻辑对不对,因为刚接触所以可能会有些混乱,还望包涵

相似回答