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()的区别和使用方法相关推荐

  1. next()、nextLine()、nextInt()的区别和使用方法

    next().nextLine().nextInt()的区别 next().nextLine().nextInt()是scanner内置的方法. 使用nextLine()方法时,不将空格看做是两个字符 ...

  2. Java Scanner类nextLine和nextInt不能同用问题

    第一种情况: 1. 先用nextLine,后用nextInt,正常使用. package test;import java.util.Scanner;public class Test {public ...

  3. 对于 Scanner类 中 next 和 nextLine 方法的区别

    首先,我们要先明白为什么要采用next与nextLine方法从键盘输入数值呢?其次在分别辨析二者区别. 我们经常接收用户输入的值都是有给定具体的类型的,但不妨有那么一些人就是反着做,导致的结果如下图: ...

  4. Java的Scanner类的next与nextLine用法区别

    next(); 从控制台获取字符串,如果字符串中包含空格,只会获取第一个作为接收的字符串.比如:输入hello I am a chinese!,接收到的只是hello. nextLine();从控制台 ...

  5. 博主在阿里笔试中拿了0分,竟是因为分不清楚 Java 输入类 nextLine 与 next 两个方法的区别

    前言 以前做算法题,都是实现一个方法,需要的参数会在方法参数中直接给出,而且需要的返回值直接在方法中 return 就好了.但是,这次阿里笔试,让博主遭遇百万点暴击,需要的参数居然要到输入流中读取,而 ...

  6. JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能

    JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...

  7. java scanner 回车_Java Scanner类用法及nextLine()产生的换行符问题实例分析

    本文实例讲述了Java Scanner类用法及nextLine()产生的换行符问题.分享给大家供大家参考,具体如下: 分析理解:Scanner sc = new Scanner(System.in); ...

  8. 7、Java基础——从控制台输入:Scanner类的的用法、数据类型转换、字符型的运算、print与println的区别、Java中的转义字符

    目录 课前先导 一.Scanner类的用法 二.Scanner语句分析 1.Scanner类 2.Scanner sc = new Scanner(System.in) 3.Scanner获取不同类型 ...

  9. java——Scanner中nextLine()方法和next()方法的区别

    遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...

最新文章

  1. 关于:为什么在 Real Producer 10 Plus 里面找不到 RealAudio 10 with aacPlus的解答
  2. tensorBoard 初级实现
  3. buu 大帝的密码武器
  4. DLX (Dancing Links/舞蹈链)算法——求解精确覆盖问题
  5. vim ctrlp_使用Ctrlp和Ctag使Vim更智能
  6. 晶圆产能紧缺,成就华为的“无厂模式”反成败笔
  7. Windows 操作小技巧 之一(持续更新)
  8. Microsoft SQL server 2005的基本操作
  9. 循环数组的动态规划问题
  10. w10 桌面计算机垃圾桶,win10垃圾桶图标不见了怎么办
  11. 关于widthStep造成的问题
  12. 硬件防火墙销售 Apache 遭遇DDOS攻击!!!!!!!!!!
  13. 一文彻底学会Redis主从复制(高可用)
  14. 神经网络中的对抗攻击与对抗样本
  15. 关于区块链、Web3.0、智能合约、DApp、DAO一文解释清楚
  16. 历届真题 杨辉三角形【第十二届】【省赛】【B组】
  17. Maven引入依赖后自动下载并关联源码 Source
  18. 锂电池等效电路模型二阶RC模型二阶戴维南模型
  19. 小白都会用的低代码大数据ETL工具又来了
  20. Learning salient boundary feature for anchor-free temporal action localization AFSD阅读笔记及代码复现

热门文章

  1. php写入速度rabbit,PHP操作RabbitMQ简单Demo
  2. 2021年度“中国存储市场影响力排行榜”榜单揭晓
  3. 第三方能查到我们的微信聊天记录?
  4. 移动应用开发——“音乐”小程序项目
  5. 函数周期表丨时间丨表丨CALENDARAUTO
  6. linux-mv命令使用
  7. Android tv树莓派遥控器,树莓派的kodi设置遥控器的方法
  8. 帝国CMS仿《3641图库》模板/图片网站源码/带WAP手机站带数据
  9. 程序人生 - 工伤认定,与你有关!你需要知道这些!
  10. Spark on k8s Operator 部署安装