【Java】Scanner类nextInt后使用nextLine无法读取输入

首先,我们先介绍一下,在学习Java语言,对于字符串的输入,由于Scanner.next()函数无法输入空格及回车,此时,我们就必须要用Scanner.nextLine()解决这类问题,

在使用过程中,我们会发现nextInt()和nextLine连用,出现这个问题:

在输入一个int数据之后,就会输出,而字符串完全没有输入......

然后去网上查了一些资料,看了一些论坛,了解了一些其中的原理,整理一下。

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符。

nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。

了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的方法。像是上边的代码nextInt()方法之后在缓冲区中留下了“\r”,然后nextLine()方法再去缓冲区找数据的时候首先看到了“\r”,然后就把这个“\r”扫描接收进来,并在缓冲区内清除掉。其实,nextLine()方法是执行过的,并没有不执行。

知道了原理,那么解决方法就比较简单了:

在nextInt()结束后,加上一句scan.nextLine()。

时间: 2024-10-12 15:55:45

【Java】Scanner类nextInt后使用nextLine无法读取输入的相关文章

Java Scanner 类

Java Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); 接下来我们演示一个最简单的的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据: 使用 ne

Java的Scanner类的next与nextLine用法区别

next(); 从控制台获取字符串,如果字符串中包含空格,只会获取第一个作为接收的字符串.比如:输入hello I am a chinese!,接收到的只是hello. nextLine();从控制台获取字符串,字符串中可以包含空格,以回车符作为接收结束标志.比如:输入hello I am a chinese!,接收到的是hello I am a chinese!. 如何让next();方法也可以向类似nextLine()一样接收包括空格的字符串呢? Scanner类中有hasNext()方法,

Java sanner类中next和nextLine的区别

next() 与 nextLine() 区别 next(): 1.一定要读取到有效字符后才可以结束输入. 2.对输入有效字符之前遇到的空白,next() 方法会自动将其去掉. 3.只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符. next() 不能得到带有空格的字符串. nextLine(): 1.以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符. 2.可以获得空白. 示例代码: import java.util.Scanner; public 

Scanner类nextInt方法的使用注意点

一.先看一段正常的代码 1. 一段用Scanner捕获键盘输入的代码: Scanner sc = new Scanner(System.in); // 先读取键盘输入的字符串 System.out.println("input name :"); String name = sc.nextLine(); // 后读取键盘输入的int值 System.out.println("input id :"); int id = sc.nextInt(); System.ou

java Scanner类的nextInt()方法在循环中无法停止的问题

我们先看JAVA的api文档中的原话: 当扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳它. 这是java API文档中的原话. 其实其意思就是说:```如果nextInt方法执行时输入a字符,这个时候没有成功解析出一个整数,那么你的本次输入不会被忽略.因为它或许能被其它格式解析.那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清除,这时继

Java Scanner类

package io; import java.util.*; public class useScanner { public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.println("请输入你的姓名:"); String name=in.nextLine(); System.out.println("请输入你的年龄:"); int age=in

java.util.Scanner类的基本使用

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scanner scanner = new Scanner(System.in); 接下来我们演示一个最简单的字符串输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串: //创建Scanner对象 Scanner scanner = new Scanner(System.in); System

java Scanner和异常

Java Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); 接下来我们演示一个最简单的的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据: 使用 ne

java键盘输入 scanner类

平常工作中较少与键盘进行直接交互,但在一些测试方法中,需要有这样的功能. 一.可以用System.in.read()方法读取单个字符,但因为字符大小的限制,实际使用中有很多不方便的地方. 示例: char a = (char) System.in.read(); System.out.println(a); 需注意返回的是字符对应的ASCII码.要使用需要进行进一步处理. 二.可以将控制台输入的当做字符串处理,需要使用BufferedReader类以及InputStreamReader类. 示例