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. Kaggle上的犬种识别(ImageNet Dogs)
  2. 巨潮网怎么下载年报_上海注册公司后如何下载电子营业执照
  3. 比特现金网络升级之争:1个CPU=1票
  4. 在哪个瞬间你感觉自己是一个产品经理?
  5. python 创建目录时间_在目录中创建带有日期时间名称和子文件的dir(Python)
  6. python调用远程的python文件_python 实现调用远程接口
  7. 不可不知的CSS小技巧
  8. Html TextArea 长度限制
  9. 在OS X 10.9上安装Java(Mavericks)
  10. mongodb 导出txt_MongoDB导出软件
  11. 开源的魔兽世界参考架构——mangos--网络游戏引擎BigWorld 服务器介绍
  12. PT002(JspStudy)安装与端口解决问题
  13. 华为手机系统更新成鸿蒙,如何将自己的华为手机升级成鸿蒙系统
  14. Tcp网络通信中各个状态的含义
  15. 「网络安全」安全设备篇(8)——流量监控
  16. 【19调剂】南方科技大学2019年硕士研究生招生预调剂公告
  17. Web--用户注册界面
  18. 自建数据库MySQL和云数据库Rds MySQL的优缺点
  19. 基于u-net,cv2以及cnn的中文车牌定位,矫正和端到端识别软件
  20. 阿里财报中的饿了么:守正出奇

热门文章

  1. 毕业论文系列之基于WiFi的智能农业大棚管控系统设计代码
  2. Python图像处理库PIL中图像格式转换(一)
  3. Stata:Logit模型评介
  4. ISP——LSC(Lens Shading Correction)
  5. Java开发进阶10本必备书单
  6. php mmseg,中文分词软件 LibMMSeg
  7. Web 用户体验设计提升指南
  8. Vue.js中Twitter第三方登录api实现[亲测可用]
  9. xctf-HTTP通常使用两种请求方法
  10. JUST技术:分布式时序相似查询初探