Scanner类 next与nextLine方法的使用问题

关于nextLine()和next()的使用

关键在于:next() 方法遇见第一个有效字符(非空格,换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描。、

这时使用nextLine(),继续读,有可能读入第一个字符是空格或换行符。

在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单。

在写作业的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种

是nextLine(),但是这两种方法 究竟有什么区别呢?

我查了一些资料总结如下:

next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab、

或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法

才将其后的输入的空格键、Tab或Enter键等视为分隔符或结束符。简单地说,next()查找并返回

来自此扫描器的下一下完整标记。完整标记的前后是与分隔模式的输入信息,所以next方法不能得到

带空格的字符串。

而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是

可以得到带空格的字符串的。

例子一:

鉴于以上两种方法的区别,同学样一定要注意next()方法 与nextLine()方法 的连用,举例如下:

package com.tarena.corejava;

import java.util.Scanner;

public class TestScanner2 {

public static void main(String[] args) {

String s1,s2;

Scanner  sc = new Scanner(System.in);

System.out.println("请输入第一个字符串:");

//s1 = sc.nextLine();

s1=sc.next();

System.out.println("请输入第二个字符:");

//s2 = sc.next();

s2=sc.nextLine();

System.out.println("输入的字符串是:"+s1+" "+s2);

}

}

可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2键盘验证,我发现

其它的next的方法 ,如dobul nextDouble(),float next Float(),int nextInt()等与nextLine()连用时都存在

这个问题,解决办法是:在第一个next(),nextDouble(),nextFloat(),nextInt()等语句后加一个nextLine()语句,

将next()去掉的Enter结束符过滤掉,例如上面的程序改写为:

public static void main(String[] args) {

String s1,s2;

Scanner  sc = new Scanner(System.in);

System.out.println("请输入第一个字符串:");

//s1 = sc.nextLine();

s1=sc.next();

sc.nextLine();

System.out.println("请输入第二个字符:");

//s2 = sc.next();

s2=sc.nextLine();

System.out.println("输入的字符串是:"+s1+" "+s2);

}

就可以了。

例子二:

package com.tarena.corejava;

import java.util.Scanner;

public class TestScanner {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("test next:输入字符串:");

String s2 = scan.next();

System.out.println("得到的字符串是:"+s2);

System.out.println("test nextLine:输入字符串:");

String s3 = scan.nextLine();

System.out.println("得到的字符串是:"+s3+"长度是:"+s3.length());

}

}

当next () 与 nextLine() 一起使用时要注意:

next() 在 nextLine 之前使用时,next 扫描空格或换行之前的字符,并没有读入"\n" , 而nextLine 则要从"\n" 开始读入,所以得不到数据、

正确方法:

  1. int n = cin.nextInt();
  2. while(str = cin.nextLine().equles(""))
  3. {
  4. }

原文地址:http://blog.sina.com.cn/s/blog_81547cad01018mnd.html

时间: 2024-08-02 03:47:00

Scanner类 next与nextLine方法的使用问题的相关文章

关于java的scanner类

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 首先使用Scanner类时候需要导包: scanner类的基本语法: Scanner类有很多种方法 .next(); .nextLine();  .nextInt(); .nextFloat(); etc... 不同的方法接受的变量类型也不同: .next() 和 .nextLine() 需要使用String类型变量接收: .nextInt() 需要int类型变量接收: .nextF

JAVA IO:Scanner类

使用Scanner类接收输入数据. JAVA提供了专门的输入数据类,此类可以完成BufferedReader类的功能,也可以方便的对输入数据进行验证,此类存放于JAVA.UTILL包中. 常用方法如下: 此类不在java.io中,而在java.utill类,所以此类是一个工具类. 1,使用Scanner接收键盘输入数据 package 类集; import java.util.* ; public class ScannerDemo01{ public static void main(Stri

Java中的Scanner类学习

转载自: Java中Scanner的nextInt(),next(),nextLine()方法总结 今天在java上机课时遇到了个小问题,使用Scanner输入数据时,使用了一次nextInt(),一次nextLine(),却只接收了一个整数.代码如下 code1: 1 package cn.dx; 2 3 import java.util.Scanner; 4 5 public class ScannerTest { 6 7 public static void main(String[] a

Scanner类的next()方法和nextLine()方法的异同点

通过一段代码就可以明白其中的奥妙!! 1 import java.util.Scanner; 2 3 public class next_nextLine { 4 public static void main(String[] args) { 5 Scanner s = new Scanner(System.in); 6 7 System.out.println("输入第一个字符串:"); 8 String s1 = s.nextLine(); 9 System.out.printl

Scanner类的.next()和.hashNext()方法

使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流 .字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同的构造器可接受文件.输入流.字符串作为数据,用于从文件.输入流.字符串中解析数据. Scanner主要提供了两个方法来扫描输入: (1)   hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int.Long等代表基本数据类型的字符串.如果需要判断是否包含下一个字符串,可以省略Xxx.

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

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

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()后无法输入nextLine()的问题

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

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