Java 为什么ArrayList返回错误:ArrayIndexOutOfBoundsException

Java 为什么ArrayList返回错误:ArrayIndexOutOfBoundsException,java,arraylist,Java,Arraylist,我不知道为什么。我逐行读取文本文件,通过拆分将其剪切并保存到ArrayList中。但是,如果文件长度超过100行,我的程序将无法工作,因此它在split命令中返回一个错误。我想知道我的电脑是否内存不足 各位,谁能说得清楚?提前谢谢你。 这是我的密码: import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; im

我不知道为什么。我逐行读取文本文件,通过拆分将其剪切并保存到ArrayList中。但是,如果文件长度超过100行,我的程序将无法工作,因此它在split命令中返回一个错误。我想知道我的电脑是否内存不足

各位,谁能说得清楚?提前谢谢你。 这是我的密码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.JOptionPane;
class Vocab implements Comparable<Vocab>{
    private String vocab;
    private String explanation;
    public Vocab(String vocab, String explanation) {
        this.vocab = vocab;
        this.explanation = explanation;
    }
    public int compareTo(Vocab that){
        return this.vocab.compareTo(that.vocab);
    }    
    public String getVocab() {
        return vocab;
    }
    public void setVocab(String vocab) {
        this.vocab = vocab;
    }
    public String getExplanation() {
        return explanation;
    }
    public void setExplanation(String explanation) {
        this.explanation = explanation;
    }
}
public class Test {
    public static void readFile(String fileName, ArrayList<String> a) throws FileNotFoundException {
        try {
            File fileDir = new File(fileName);
            BufferedReader in = new BufferedReader(
                new InputStreamReader(
                    new FileInputStream(fileDir), "UTF8"));
        String str;
        while((str= in.readLine())!= null){
               a.add(str);                 
        }
        in.close();
        }         
        catch (IOException e) 
        {
            JOptionPane.showMessageDialog(null,"Something in database went wrong");
        }                    
    }        
    public static void main(String[] args) throws FileNotFoundException {
        // TODO code application logic here
        ArrayList<Vocab> a= new ArrayList<Vocab>();
        ArrayList<String> b= new ArrayList<String>();
        readFile("DictVE.dic",b);
        for (String t: b){
            String[] temp= t.split(":");
            a.add(new Vocab(temp[0].trim(), temp[1].trim()));// error in here
        }
    }    
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.Collections;
导入javax.swing.JOptionPane;
类Vocab实现了可比较的{
私人弦乐;
私有字符串解释;
公共词汇(字符串词汇、字符串解释){
this.vocab=vocab;
这个解释=解释;
}
公共int比较(Vocab-that){
返回this.vocab.compareTo(that.vocab);
}    
公共字符串getVocab(){
返回vocab;
}
公共void setVocab(字符串vocab){
this.vocab=vocab;
}
公共字符串getExpression(){
返回说明;
}
公共解释(字符串解释){
这个解释=解释;
}
}
公开课考试{
公共静态void readFile(字符串文件名,ArrayList a)引发FileNotFoundException{
试一试{
File fileDir=新文件(文件名);
BufferedReader in=新的BufferedReader(
新的InputStreamReader(
新文件输入流(fileDir),“UTF8”);
字符串str;
而((str=in.readLine())!=null){
a、 添加(str);
}
in.close();
}         
捕获(IOE异常)
{
showMessageDialog(null,“数据库中出现了错误”);
}                    
}        
公共静态void main(字符串[]args)引发FileNotFoundException{
//此处的TODO代码应用程序逻辑
ArrayList a=新的ArrayList();
ArrayList b=新的ArrayList();
读取文件(“DictVE.dic”,b);
for(字符串t:b){
字符串[]temp=t.split(“:”);
a、 添加(新词汇(临时[0].trim(),临时[1].trim());//此处有错误
}
}    
}

这是我的文件:

中有一个微妙的问题,即从字符串末尾丢弃空令牌:

因此,结果数组中不包括尾随的空字符串

因此:

通过将负int作为第二个参数传递,可以保留空字符串:

System.out.println("Hello:".split(":", -1).length); // Prints 2.

中存在一个微妙的问题,即从字符串末尾丢弃空标记:

因此,结果数组中不包括尾随的空字符串

因此:

通过将负int作为第二个参数传递,可以保留空字符串:

System.out.println("Hello:".split(":", -1).length); // Prints 2.

您确定所有行都有“:”@KevinEsche在文件的每一行中始终有“:”字符吗。我已经定义了它,您可以在我的线程末尾查看它们。您的任何字符串都以
?@ParkerHalo结尾,我确定:)。你可以试试你的电脑。我将文件放在线程的末尾:)您确定所有行都有“:”?@KevinEsche在文件的每行中始终有“:”字符吗。我已经定义了它,您可以在我的线程末尾查看它们。您的任何字符串都以
?@ParkerHalo结尾,我确定:)。你可以试试你的电脑。我将文件放在线程的末尾:)