逐行阅读java

时间:2014-04-07 08:52:12

标签: java file set

我有一个看起来像这样的文本文件:

1 
2 3
4 5
6 7

我希望有两个字符串,它们是同一行的值。例如:

字符串s1为2,字符串s2为3

我试过这样:

    File file = new File("e:\\read.txt");
    if (file.exists()){
     FileReader fr = new FileReader(file);
     LineNumberReader ln = new LineNumberReader(fr);
        while (ln.getLineNumber() == 0){

            s=Integer.parseInt(ln.readLine());
         System.out.println(s);
        }
        DisjointSetLinkedList dsj=new DisjointSetLinkedList();
        while(ln.getLineNumber()>0)
        {

           String [] tokens = ln.readLine().split(" ");
           s1=tokens[0];
           System.out.println( s1);
        }

我必须在2个字符串之间建立联合,它们位于同一行:

3 个答案:

答案 0 :(得分:1)

将您的第二个循环更改为:

    String line = null;
    while ((line = ln.readLine()) != null) {

        String[] tokens = line.split(" ");
        String s1 = tokens[0];
        String s2 = tokens[1];
        System.out.println("s1 = " + s1 + " s2 = " + s2);
    }

否则,当您尝试使用NullPointerException访问最后一行时,您将ln.readLine()

您也不需要while loop阅读第一行,只需阅读一次。

答案 1 :(得分:1)

我觉得这样更容易:

    try {
        File file = new File("numbers.txt");
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        while ((line = br.readLine())!= null) {
            String[] tokens = line.split("\\s");
            System.out.println(Arrays.toString(tokens));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

答案 2 :(得分:1)

如果您将令牌[0]作为整个第一行,则可以像这样结合

for(int i=2; i<token.length;i+2)
   System.out.println("UNION: "+Union(token[i-2], token[i]));