我如何使用split()与大量的元素,java

时间:2014-10-13 14:50:39

标签: java

我需要处理一个大文本文件,每行有近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(“,”)来获取一行的最后一列,并且它将超出数组范围,我该怎么办呢?感谢。

3 个答案:

答案 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方法执行时,它将自动初始化数组的正确大小。