一:问题描述
当输入完第一值后,就未能输入后来的字符串
package com.wyj.two;import java.util.Scanner;public class text {public static void main(String[] args) {Scanner in = new Scanner(System.in);int temp = in.nextInt();System.out.println(temp);String str = in.nextLine();System.out.println(str);}
}
二:问题解析
经过从网上查询资料,了解到Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格、回车等都算作是空白符。
next()与nextLine()的区别
next()方法在读取内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其过滤掉;只有在读取到有效字符之后,next()方法才将其后的空格键、Tab键或Enter键等视为结束符;所以next()方法不能得到带空格的字符串。
nextLine()方法字面上有扫描一整行的意思,它的结束符只能是Enter键,即nextLine()方法返回的是Enter键之前没有被读取的所有字符,它是可以得到带空格的字符串的。
next()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中
nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉
三:问题解决
1.可以在后面加一个 nextLine();专门读取无效字符
2.或者就别用nextLine()输入, 直接用next();