1、next()、nextInt()、nextLine() 的使用方法及区分
三者简单定义
next():此方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,遇到第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。如下例:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("读入一个字符串:");
String s = sc.next();
System.out.println(s);
}
结果:
nextInt():此方法只读取数值,不会读取空格和换行符,当我们用此方法读取后,再用 nextLine() 方法读取,会读取到剩余的空格或换行符,如下例:

nextLine():此方法会扫描到一行内容并作为一个字符串而被获取到,如果要读取带有空格的一串字符串,需要用此方法,如下例:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("读入第一个字符串:");
String s = sc.next();
System.out.println(s);
System.out.println("读入第二个字符串:");
s = sc.nextLine();
System.out.println(s);
}
结果:
解决方法:只需在sc.next()后面加上一个sc.nextLine()即可消除该回车,如下:

结果:
例:当你输入一串带空格的字符串,敲下回车后,若最开始碰到 sc.next(),sc.next() 只会读取第一个不是空格的单词。例如下例,当 sc.next 读完 hello 后,读取的 cursor 是在空格前,导致读取的 nextLine 长度是 6。

2、循环时如何使用 hasNext 方法
遇到 hasNext() 时,Scanner 会阻塞,等待用户输入,等你输入后返回 true,若没有,会一直阻塞等待用户输入
如下代码,你需要先先输入,才会进入while循环,才会显示“请输入”

当我们想用 hasNext 做退出条件的 while 循环时,
- 方法一是在控制台手动输入 Ctrl+Z
- 方法二 while(!sc.hasNext("#")) 约定当一行输入 # 时退出
如下:

3、用 hasNextInt() 作为判断下一个输入是否为数字需要配合 next() 方法使用
hasNextInt() 函数大体意思表示 scanner 当前的标记的输入是否为 int,并不会自动的移动标记。
例如实现一个判断当前输入是否为数字,不是的话提示请输入数字,因为该函数不会自动的移动标记,所以就会死循环输出“请输入数字”,如下代码

要实现 hasNextInt() 的读取的标记位置的改变,可以用 sc.next() 移动
解决代码:

JavaScanner方法next(),nextInt(),nextLine()详解及hasNext在循环中的应用,

1139

被折叠的 条评论
为什么被折叠?



