一尘不染

使用Scanner类输入

java

我从过去的经验中了解到的是,
nextInt()nextDouble()将继续搜索,直到在同一行或下一行找到整数或双精度都没有关系,而通过扫描器类读取输入的字符串时,则会next()考虑空格和将光标保持在同一行,如果在in代码之前使用if
nextLine()会考虑剩余的光标,有人可以帮助我更详细地了解这一点,尤其是关于它的开始位置和结束位置吗?另外,如果我认为任何错误是正确的,请告诉我。next()``nextLine()``nextLine()


阅读 202

收藏
2020-12-03

共1个答案

一尘不染

您最初的理解是错误的。

我从过去的经验中了解到的是.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():返回字符串,直到遇到\nor \r或or 为止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

希望对您有所帮助。

2020-12-03