我不知道为什么会这样。我逐行读取我的文本文件,通过拆分切割线并将它们保存到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
}
}
}
这是我的档案:DictEV.dic
答案 0 :(得分:4)
String.split(String)
method中存在一个微妙的问题,即从字符串的末尾丢弃空标记:
因此,结尾的空字符串不包含在结果数组中。
所以:
System.out.println("Hello:".split(":").length); // Prints 1.
您可以通过将负int作为第二个参数传递来保留空字符串:
System.out.println("Hello:".split(":", -1).length); // Prints 2.