2016-01-21 79 views
0

我只是想知道,我是否正确地解释了代码?有关从文件读取时跳过备用行的说明?

文件Bharath.txt有以下内容:

Hello ! B . We created your file succesfully . We have updated you file , Sir ! Bharath Nikhil Friends Indeed 

考虑下面的代码:

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中时,它开始交替地跳过行。它是否将键盘上的输入为作为输入?

所以,当我按输入,它也通过转义序列作为输入,这就是为什么它跳过一个,并打印另一个?

还有一个疑问是关于while循环:Is是一行被浪费,而比较它是否为null?

  1. 巴拉斯
  2. 尼基尔
  3. 朋友的确

所以,当我引用:

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

它会检查是否Bharath == null或没有,如果没有,它只会打印Nikhil?并且后Nikhil,它将跳过下一行,因为它需要输入作为转义序列。

请纠正我!我可能混淆了两种不同的方法。因此,初学者。

此外,请区分将input.nextLine()转换为String并作为独立代码的区别。

回答

0

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

3

但是,当我不考虑在一个字符串中存储“input.nextLine()”时,它开始跳过直线交替。是否,它甚至将键盘上的ENTER作为输入?

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

如果您在每次迭代(曾经在while条件,一旦体内)调用input.nextLine()两次,然后,如果你把它一次每次迭代(按你的原代码,你会只执行一半多的迭代)。

+0

要增加更多,是否正确地说:它使用两次:“一旦进入”而“一旦进入身体内部”就像两个单独的陈述?并不一样。我的意思是,虽然是第一次,身体是第二次,再次是第三次,而第四次是身体再次? – 1ambharath

+0

@ 1ambharath:一旦进入*条件*并且一次进入*主体*。身体仍然在while语句中......这是while语句的主体*。 –

+0

好的。所以,当我用input.nextLine()初始化字符串时,我基本上是在同一个语句中传递同样的语句。不同于前面的代码,它会被执行两次。因此,它工作得很好。对 ? – 1ambharath

1
input.nextLine() 

做了两两件事:

  1. 返回当前线路
  2. 推进光标执行当前行

Scanner.nextLine()

的价值

将此扫描仪推进到当前行,并返回跳过 的输入。

所以,如果你不存储input.nextLine()的结果,它将会丢失。

每次拨打input.nextLine()都会超过当前行,所以每次拨打电话时都会读取不同的部分输入。

相关问题