使用Scanner类输入

我从过去的经验中理解的是nextInt()nextDouble()将继续搜索,直到在相同或下一行中找到整数或双重无关紧要,同时通过扫描器类读取字符串作为输入在空格之前考虑那些字符串并将光标保持在同一行中,如果在代码中的nextLine()之前使用nextLine()会考虑next()的剩余部分,有人可以帮助我更详细地理解这一点,特别是关于它启动的nextLine()和光标结束的地方? 另外,如果我认为有任何错误,请告诉我。

你的第一个理解是错误的。

我从过去的经验中理解的是.nextInt()或.nextDouble()将继续搜索,直到整数或双重在同一行或下一行中找到它无关紧要

nextInt()nextDouble()等待整数和double。 如果它得到字符串而不是它的期望,它会抛出InputMismatchException

您可以运行此代码并亲自查看。

 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); s.nextInt(); } } 

根据你的报价:

.nextInt()或.nextDouble()将继续搜索,直到在相同或下一行中找到整数或双精度无关紧要

输入: Abcdf234gd 。 你不会得到234 。 你得到InputMismatchException

对于.next().nextLine()

.next() :只读取并返回一个字符串,直到遇到空格或EOF

.nextLine() :返回字符串,直到遇到\n\r\r EOF 。 意思是,它返回整行。


光标位置

next()

考虑字符串:

 ABC DEF GHI JKL MNO PQR STU VWX YZ 

初始位置:

 ->ABC DEF GHI JKL MNO PQR STU VWX YZ 

当你调用next() ,光标移动到:

 ABC ->DEF GHI JKL MNO PQR STU VWX YZ 

并返回ABC


nextLine()

考虑字符串:

 ABC DEF GHI JKL MNO PQR STU VWX YZ 

初始位置:

 ->ABC DEF GHI JKL MNO PQR STU VWX YZ 

当你调用nextLine() ,光标移动到下一行:

 ABC DEF GHI JKL ->MNO PQR STU VWX YZ 

并返回ABC DEF GHI JKL

我希望它有所帮助。