我需要处理一个大文本文件,每行有近400列,文件中有近80万行,文件中每行的格式如下:
340,9,2,3 ........ 5,2,LA
我想要做的是,对于每一行,如果最后一列是LA,则打印该行的第一列。
我写了一个简单的程序来做它
BufferedReader bufr = new BufferedReader(new FileReader ("A.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter ("LA.txt"));
String line = null;
while ((line = bufr.readLine()) != null) {
String [] text = new String [388];
text = line.split(",");
if (text [387] == args[2]) {
bufw.write(text[0]);
bufw.newLine();
bufw.flush();
}
}
bufw.close();
bufr.close();
但似乎数组的长度不能很大,我收到了java.lang.ArrayIndexOutOfBoundsException 因为我使用split(“,”)来获取一行的最后一列,并且它将超出数组范围,我该怎么办呢?感谢。
答案 0 :(得分:2)
text
不需要初始化,String.split
将创建一个正确大小的数组:
String[] text = line.split(",");
您还使用引用相等性(==
)比较字符串。您应该使用.equals()
:
if (text[387].equals(args[2])) { ... }
您可能会收到java.lang.ArrayIndexOutOfBoundsException
,因为索引387
太大了。如果你想获得最后一个元素,请使用:
text[text.length - 1]
答案 1 :(得分:1)
修改并尝试此
String [] text = line.split(",");
if (text [text.length - 1].equals(args[2])) {
bufw.write(text[0]);
bufw.newLine();
bufw.flush();
}
假设args[2]
为LA
。
答案 2 :(得分:0)
String [] text;
将您的代码更改为此。您不需要初始化大小。当String.split方法执行时,它将自动初始化数组的正确大小。