Java Scanner类中next()与nextLine()区别”

小声bb一下:在使用Scanner类输入字符、整形或字符型数据等等时,作为新手的我,每当输入字符型时知道有next()、nextLine()这两个方法,每次输入一个字符都要按一下enter再输入下一个字符,使用时也只是简单知道这两个方法的区别就是:只知道使用nextLine方法输入的是一行完整的字符串(包括空白串)。但没想过它们到底有什么区别呢?下面主要简单介绍一下next()与nextLine()的区别吧。有什么不对的地方请各路大神指点指点。

Scanner类

jdk 8 API文档解析:scanner是一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。
百度经验解析:Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器

scanner类中的各种方法可以参考API文档
中文版免费下载地址:jdk 8 api文档中文版下载
英文版官网在线地址:jdk 8 api英文版在线阅读

下面主要讲解字符串中的--------------next方法和nextLine方法。

next与nextLine方法

Scanner类中录入String类型数据的方法:

  • next():

读取到空白符、制表符(\t) 、换行(\n)或enter键等就会被next()方法过滤掉。只能扫描到这些符号出现前的字符。

  • nextLine():

扫描一整行的字符,enter键为结束符,读取enter之前未读取的所有字符。

注:这两个方法的解析可以查看官网英文版,看不懂也可查看中文版。

【举例:】

next()方法:

import java.util.Scanner;
public class ScannerTest {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("next()---输入多个字符串(每输入一个使用空格分开):");
		String a = input.next();
		System.out.println("输出结果:");
		System.out.println(a);
		
	}
}

结果:
结果

nextLine()方法:

import java.util.Scanner;
public class ScannerTest {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("nextLine---输入多个字符串(每输入一个使用空格或tab分开):");
		String b = input.nextLine();
		System.out.println("输出结果:");
		System.out.println(b);
	}
}

结果:
结果2

由此可见
nextLine方法搜索通过输入寻找行分隔符(enter)的输入,搜索到了就结束扫描,扫描读取整行;如果不存在行分隔符,则它可以缓冲搜索行的所有输入,以跳过该行。

为了加深理解,当这两个方法一起用会发生什么情况呢?下面代码实现观察。
【举例2】

import java.util.Scanner;
public class ScannerTest {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("next()---输入多个字符串(每输入一个使用空格分开):");
		String a = input.next();
		System.out.println(a);
		System.out.println("nextLine---输入多个字符串(每输入一个使用空格分开):");
		String b = input.nextLine();
		System.out.println(b);

	}
}

结果:
结果3

由此可见
当输入完字符,按下enter键时,使用的next()方法只能扫描读取到空格前的字符,但是到nextLine方法使用时却不能输入了,程序停止运行了,直接输出了使用了next方法之后之前输入的剩下的字符了。原因是因为next()方法在a后面读取到了空白符(如:空格、tab)就结束,但是程序还未停止,按下enter(\r)时,next方法结束了,输出,而其它字符会在缓冲区等待(包括enter(\r));nextLine()开始扫描,当遇到回车(enter(\r))时,nextLine()方法就结束了,直接扫描读取了缓冲搜索行的所有输入。

如果交换一下顺序会发生什么情况呢?
next()与nextLine()方法部分代码交换后:

import java.util.Scanner;
public class ScannerTest {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("nextLine---输入多个字符串(每输入一个使用空格分开):");
		String b = input.nextLine();
		System.out.println("输出结果:");
		System.out.println(b);
		System.out.println("next()---输入多个字符串(每输入一个使用空格分开):");
		String a = input.next();
		System.out.println("输出结果:");
		System.out.println(a);
	}
}

结果:
结果4

由此可见
输入,换行,该nextLine方法扫描结束,直接打印整行的字符串,但程序还没结束,还有next()方法,重新输入扫描,而输入时有a b c,换行,输出的只有a,是因为next()方法遇到空白符就扫描结束了,剩下的字符被过滤掉了,但剩下的字符还在缓冲区。

hasNext()等方法的介绍

这些方法用于判断,下面是一部分,更多可以查找API文档。

文档

【举例:】

import java.util.Scanner;
public class ScannerTest02 {
	public static void main(String[] args) {
		System.out.println("请输入数据:");
		Scanner input=new Scanner(System.in);
		int m = 0;					//初始化
		m=input.nextInt();			//输入
		if(input.hasNextInt()){		//如果此扫描仪输入中的下一个标记可以使用 nextInt()方法解释为默认基数中的int值,则返回true。 
			System.out.println("输出结果:");
			System.out.println(m);	//输出的是开始输入扫描的m值
		}	
	}
}

结果:
hasNextInt

注:其它方法的使用则同理!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值