Scanner类nextLine()和next()的区别和使用方法
1、问题描述
在实现字符窗口的输入时,很多人更喜欢选择使用扫描器Scanner,它操作起来比较简单。在编程的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(),但是这两种方法究竟有什么区别呢?
2、解析
(1)next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
(2)简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。
(3)而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
3、举例代码
(1)鉴于以上两种方法的只要区别,一定要注意next()方法和nextLine()方法的连用,举个例子:
public class NextTest{ public static void main(String[] args) { String s1,s2; Scanner sc=new Scanner(System.in); System.out.print("请输入第一个字符串:"); s1=sc.nextLine(); System.out.print("请输入第二个字符串:"); s2=sc.next(); System.out.println("输入的字符串是:"+s1+" "+s2); }
}
运行结果:
请输入第一个字符串:home
请输入第二个字符串:work输入的字符串是:home work
但如果把程序改一下:
s1=sc.next();
s2=sc.nextLine();
运行结果:
请输入第一个字符串:home
请输入第二个字符串:输入的字符串是:home
运行结果分析:
可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。经过验证,我发现其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题,解决的办法是:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉
上面的程序改写为:
import java.util.Scanner;
public class Test02 {public static void main(String[] args) {String s1,s2;Scanner sc=new Scanner(System.in);System.out.println("请输入第一个字符串:");s1=sc.next();sc.nextLine();System.out.println("请输入第二个字符串:");s2=sc.nextLine();System.out.println("输入的字符串是:"+s1+" "+s2);}
}
运行结果:
请输入第一个字符串:
home
请输入第二个字符串:
work
输入的字符串是:home work
Scanner类nextLine()和next()的区别和使用方法相关推荐
- next()、nextLine()、nextInt()的区别和使用方法
next().nextLine().nextInt()的区别 next().nextLine().nextInt()是scanner内置的方法. 使用nextLine()方法时,不将空格看做是两个字符 ...
- Java Scanner类nextLine和nextInt不能同用问题
第一种情况: 1. 先用nextLine,后用nextInt,正常使用. package test;import java.util.Scanner;public class Test {public ...
- 对于 Scanner类 中 next 和 nextLine 方法的区别
首先,我们要先明白为什么要采用next与nextLine方法从键盘输入数值呢?其次在分别辨析二者区别. 我们经常接收用户输入的值都是有给定具体的类型的,但不妨有那么一些人就是反着做,导致的结果如下图: ...
- Java的Scanner类的next与nextLine用法区别
next(); 从控制台获取字符串,如果字符串中包含空格,只会获取第一个作为接收的字符串.比如:输入hello I am a chinese!,接收到的只是hello. nextLine();从控制台 ...
- 博主在阿里笔试中拿了0分,竟是因为分不清楚 Java 输入类 nextLine 与 next 两个方法的区别
前言 以前做算法题,都是实现一个方法,需要的参数会在方法参数中直接给出,而且需要的返回值直接在方法中 return 就好了.但是,这次阿里笔试,让博主遭遇百万点暴击,需要的参数居然要到输入流中读取,而 ...
- JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能
JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...
- java scanner 回车_Java Scanner类用法及nextLine()产生的换行符问题实例分析
本文实例讲述了Java Scanner类用法及nextLine()产生的换行符问题.分享给大家供大家参考,具体如下: 分析理解:Scanner sc = new Scanner(System.in); ...
- 7、Java基础——从控制台输入:Scanner类的的用法、数据类型转换、字符型的运算、print与println的区别、Java中的转义字符
目录 课前先导 一.Scanner类的用法 二.Scanner语句分析 1.Scanner类 2.Scanner sc = new Scanner(System.in) 3.Scanner获取不同类型 ...
- java——Scanner中nextLine()方法和next()方法的区别
遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...
最新文章
- 关于:为什么在 Real Producer 10 Plus 里面找不到 RealAudio 10 with aacPlus的解答
- tensorBoard 初级实现
- buu 大帝的密码武器
- DLX (Dancing Links/舞蹈链)算法——求解精确覆盖问题
- vim ctrlp_使用Ctrlp和Ctag使Vim更智能
- 晶圆产能紧缺,成就华为的“无厂模式”反成败笔
- Windows 操作小技巧 之一(持续更新)
- Microsoft SQL server 2005的基本操作
- 循环数组的动态规划问题
- w10 桌面计算机垃圾桶,win10垃圾桶图标不见了怎么办
- 关于widthStep造成的问题
- 硬件防火墙销售 Apache 遭遇DDOS攻击!!!!!!!!!!
- 一文彻底学会Redis主从复制(高可用)
- 神经网络中的对抗攻击与对抗样本
- 关于区块链、Web3.0、智能合约、DApp、DAO一文解释清楚
- 历届真题 杨辉三角形【第十二届】【省赛】【B组】
- Maven引入依赖后自动下载并关联源码 Source
- 锂电池等效电路模型二阶RC模型二阶戴维南模型
- 小白都会用的低代码大数据ETL工具又来了
- Learning salient boundary feature for anchor-free temporal action localization AFSD阅读笔记及代码复现
热门文章
- php写入速度rabbit,PHP操作RabbitMQ简单Demo
- 2021年度“中国存储市场影响力排行榜”榜单揭晓
- 第三方能查到我们的微信聊天记录?
- 移动应用开发——“音乐”小程序项目
- 函数周期表丨时间丨表丨CALENDARAUTO
- linux-mv命令使用
- Android tv树莓派遥控器,树莓派的kodi设置遥控器的方法
- 帝国CMS仿《3641图库》模板/图片网站源码/带WAP手机站带数据
- 程序人生 - 工伤认定,与你有关!你需要知道这些!
- Spark on k8s Operator 部署安装