我只是想知道,我是否以正确的方式解释了代码?
文件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
时是浪费了一行吗?
所以,当我引用时:
while((input.nextLine()) != null)
{
System.out.println(input.nextLine());
}
它会检查是否Bharath==null
,如果没有,它只会打印Nikhil
?并发布Nikhil
,它将跳过下一行,因为它将 Enter 作为转义序列。
拜托,纠正我!我可能会混淆两种不同的方法。因此是初学者。
另外,请务必区分将input.nextLine()
传递给String
和作为独立代码之间的区别。
答案 0 :(得分:3)
但是,当我不考虑存储" input.nextLine()"在String中,它开始跳过行。是吧,它甚至将键盘输入作为输入吗?
嗯不,每次拨打input.nextLine()
时,它只是在读下一行。这不应该是令人惊讶的。忽略转义序列等。为了简单起见,假设input.nextLine()
只是从某个字符串列表中读取...它有一个光标显示列表中的位置。每次调用input.nextLine()
时,它都会返回当前行并将光标向下移动。
如果你在每次迭代中调用input.nextLine()
两次(一次在while
条件下并且一次在体内),那么你只执行一半的迭代,就像你调用它一样每次迭代一次(根据原始代码)。
答案 1 :(得分:1)
input.nextLine()
有两件事:
使此扫描程序超过当前行并返回该输入 被跳过了。
因此,如果您不存储input.nextLine()
的结果,则会丢失。
对input.nextLine()
的每次通话都会超过当前行,因此每次通话都会读取输入的不同部分。
答案 2 :(得分:0)
第二个代码段中的问题不是存储,而是您在每次迭代中调用nextLine()
两次的事实。首先,在while
循环中调用它 - 读取行然后忽略(即,不保存在任何地方),但输入流的内部光标前进到下一行。然后,在println
行中,您读取另一行并将其返回到System.out.println
,实际上忽略了所有奇数行。