Scanner的next,nextint和nextLine的使用总结

问题所在:

java中Scanner类中nextLine()方法与next()或nextInt()联用时可能出现一个常见的错误,那就是当next()或者nextInt(),nextDouble() 、 nextFloat()用在nextLine的前面时。nextLine会把前者的结束符“换行符”作为字符串读入,进而不需要从键盘输入字符串nextLine已经转向下一条语句执行

 public class Test {

      public static void main(String[] args) {
          Scanner in =  new Scanner(System.in);
          System.out.println("请输入一个整数");
        while(in.hasNextInt()){
             int num = in.nextInt();
             System.out.println("请输入一个字符串");
             String str = in.nextLine();
             System.out.println("num="+num+",str="+str);
             System.out.println("请输入一个整数");
         }
     }
 }
行结果为:

     请输入一个整数
     1231
     请输入一个字符串
     num=1231,str=
     请输入一个整数

     第二个String类型的参数没有读取进来。

改用了next()方法

public class Test {

      public static void main(String[] args) {
          Scanner in =  new Scanner(System.in);
          System.out.println("请输入一个整数");
        while(in.hasNextInt()){
             int num = in.nextInt();
             System.out.println("请输入一个字符串");
             String str = in.next();
             System.out.println("num="+num+",str="+str);
             System.out.println("请输入一个整数");
         }
     }
 }
 请输入一个整数
        213 jdskals
        请输入一个字符串
        num=213,str=jdskals
        请输入一个整数

原因:

next()以忽略空格,Tab,Enter键开始,以空格,Tab,Enter键作为结束符结束

next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键,换行符或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。

nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的

修正方法:在next()或nextInt()方法使用Enter键之后,填充一个无用的nextLine()

时间: 2024-10-12 03:04:43

Scanner的next,nextint和nextLine的使用总结的相关文章

关于Scanner调用 sc.nextInt() 异常try后不能二次输入导致死循环问题

先看下简化的代码,引出问题所在: public class Run { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { try { System.out.println("1-登录 2-注册 3-查看用户 0-退出"); int menu = sc.nextInt(); if (menu == 0) { System.out.println(&quo

Java中Scanner类在nextInt()后无法输入nextLine()的问题

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取.这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符. nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉. 了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的

nextInt和nextLine以及next方法的区别

最近在刷算法题的时候,发现如下问题 1 Scanner in = new Scanner(System.in) 2 3 int n = in.nextInt(); 4 5 String str = in.nextLine(); 在控制台中,输入: 3 hello 发现str的值为空,说明nextLine方法,没有读取到"hello"字符串. 为了解决以上问题,现将控制台输入内容的读取方法总结下. 一.nextInt() it only reads the int value, next

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 Scanner类的nextInt()方法在循环中无法停止的问题

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

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

首先,我们先介绍一下,在学习Java语言,对于字符串的输入,由于Scanner.next()函数无法输入空格及回车,此时,我们就必须要用Scanner.nextLine()解决这类问题, 在使用过程中,我们会发现nextInt()和nextLine连用,出现这个问题: 在输入一个int数据之后,就会输出,而字符串完全没有输入...... 然后去网上查了一些资料,看了一些论坛,了解了一些其中的原理,整理一下. 首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的

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中关于nextInt()、next()和nextLine()的理解

先看解释: nextInt(): it only reads the int value, nextInt() places the cursor in the same line after reading the input. next(): read the input only till the space. It can't read two words separated by space. Also, next() places the cursor in the same lin

java Scanner和异常

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