从文件中读取时跳过备用行的说明?

时间:2016-01-21 15:43:39

标签: java java.util.scanner

我只是想知道,我是否以正确的方式解释了代码?

文件Bharath.txt具有以下内容:

  你好! B。我们成功创建了您的文件。先生,我们已经更新了你的档案! Bharath Nikhil Friends确实

考虑以下代码:

import java.util.Scanner;
import java.io.*;

class FilInpStr
{
    public static void main(String arg[]) throws Exception
    {
        FileInputStream obj=new FileInputStream("Bharath.txt");
        Scanner input=new Scanner(obj);

        String n="";
        while((n=input.nextLine())!=null)
        {
            System.out.println(n);
        }

    }
}

上面的代码很有效。但是当我不考虑在input.nextLine()中存储String时,它会开始跳过行。它是否从键盘输入 Enter 作为输入?

所以,当我按 Enter 时,它也会传递转义序列作为输入,这就是它跳过一个并打印另一个的原因?

另一个疑问是关于while循环:在比较它是否为null时是浪费了一行吗?

  1. Bharath
  2. 尼基尔
  3. 朋友确实
  4. 所以,当我引用时:

    while((input.nextLine()) != null)
    {
        System.out.println(input.nextLine());
    }
    

    它会检查是否Bharath==null,如果没有,它只会打印Nikhil?并发布Nikhil,它将跳过下一行,因为它将 Enter 作为转义序列。

    拜托,纠正我!我可能会混淆两种不同的方法。因此是初学者。

    另外,请务必区分将input.nextLine()传递给String和作为独立代码之间的区别。

3 个答案:

答案 0 :(得分:3)

  

但是,当我不考虑存储" input.nextLine()"在String中,它开始跳过行。是吧,它甚至将键盘输入作为输入吗?

嗯不,每次拨打input.nextLine()时,它只是在读下一行。这不应该是令人惊讶的。忽略转义序列等。为了简单起见,假设input.nextLine()只是从某个字符串列表中读取...它有一个光标显示列表中的位置。每次调用input.nextLine()时,它都会返回当前行并将光标向下移动。

如果你在每次迭代中调用input.nextLine()两次(一次在while条件下并且一次在体内),那么你只执行一半的迭代,就像你调用它一样每次迭代一次(根据原始代码)。

答案 1 :(得分:1)

input.nextLine()

有两件事:

  1. 返回当前行的值
  2. 光标推进当前行
  3. Scanner.nextLine()

      

    使此扫描程序超过当前行并返回该输入   被跳过了。

    因此,如果您不存储input.nextLine()的结果,则会丢失。

    input.nextLine()的每次通话都会超过当前行,因此每次通话都会读取输入的不同部分。

答案 2 :(得分:0)

第二个代码段中的问题不是存储,而是您在每次迭代中调用nextLine() 两次的事实。首先,在while循环中调用它 - 读取行然后忽略(即,不保存在任何地方),但输入流的内部光标前进到下一行。然后,在println行中,您读取另一行并将其返回到System.out.println,实际上忽略了所有奇数行。

相关问题