我正在使用Scanner类来获取输入。我想要得到所有的 使用in.next()的行中的单词。我知道可以用它来完成 nextLine()但我想了解in.next()和in.hasNext() 的工作原理。
System.out.println("What is designation");
String desg = in.next();
while(in.hasNext()){
desg+=in.next();
}
给出了
What is designation
member technical staff\n
^Z
Hello abhishek kumarNext year you will be 22Salary is 30000.0Designation is membertechnicalstaff
但如果我使用
System.out.println("What is designation");
String desg = in.next();
if(in.hasNext()){
desg+=in.next();
}
它输出为
What is designation
member technical staff
Hello abhishek kumarNext year you will be 22Salary is 44254.0Designation is membertechnical
在第一种情况下,我得到所有的话,但它一直在要求 下一个输入,我必须使用CTRL + Z指定输入结束。但在 第二种情况我没有得到最后一个字(工作人员)。请解释一下。
答案 0 :(得分:3)
第一个代码在while
循环中读取输入 - 即直到找到in.hasNext() == false
。
第二个代码使用的是if
条件 - 它最多只读取in.next()
一次(在初始读取后)。
因此,第二个代码不是“等待新输入”,因为它只询问in.next()
一次,而不是在输入用尽之前,与第二个代码快照不同。
P.S。请注意,行String desg = in.next();
(在第一个代码快照中)是一种不好的做法,原因有两个:
答案 1 :(得分:2)
问题不在于in.next()
问题在于使用if
它只执行一次
约next()
只有才能返回下一个标记
所以第二种情况:( if
一个)
当您输入成员技术人员时
在这一部分:String desg = in.next();
仅member
被分配到desg
在输入if
后,它会检查下一个令牌(技术)并将其与前一个字符串desg+=in.next()
连接起来
现在desg
成为membertechnical
答案 2 :(得分:0)
如果您想了解有关API中类的更多详细信息,javadoc是最佳来源。这是javadoc for Scanner。
public String next()
查找并返回此扫描仪的下一个完整令牌。在完成令牌之前和之后是与分隔符模式匹配的输入。即使之前的hasNext()调用返回true,此方法也可能在等待输入扫描时阻塞。