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

java——Scanner中nextLine()方法和next()方法的区别        遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码:importjava.util.Scanner;//Scanner中nextLine()方法和next()方法的区别publicclassScannerString{publicstatic…

大家好,又见面了,我是你们的朋友全栈君。

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

import java.util.Scanner;

//Scanner中nextLine()方法和next()方法的区别
public class ScannerString {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("请输入字符串(nextLine):");
        String str1 = input.nextLine();
        System.out.println(str1);

        System.out.println("请输入字符串(next):");
        String str = input.next();
        System.out.println(str);
 

}}

首先第一次测试:nextLine与next都没有空格:

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

这时的结果都是正确的。

第二次:nextLine与next都有空格:

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

这时的结果发现next只输出了“曹老板”后面的”很有钱”并没有输出。

第三次:我们将代码中next和nextLine的顺序调整一下,然后再进行测试:

 

import java.util.Scanner;

//Scanner中nextLine()方法和next()方法的区别
public class ScannerString {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("请输入字符串(next):");
        String str = input.next();
        System.out.println(str);

        System.out.println("请输入字符串(nextLine):");//曹老板很有钱
        String str1 = input.nextLine();
        System.out.println(str1);
    }
}

这是调整好顺序的代码。

下面进行测试:

next与nextLine都没有空格:

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

哇,是不时发现什么了, 我还没有输入nextLine的字符串,它已经停掉了,java——Scanner中nextLine()方法和next()方法的区别

于是我查阅了Api文档

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

 

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

 

知道你们看不懂,解释一下:

Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,它判断读取结束的标示是  空白符;比如空格,回车,tab 等等。

 

 

next()方法读取到空白符就结束l;

nextLine()读取到回车结束也就是“\r”;

所以没还顺序前测试的时候next()再检测的空格的时候就结束输出了。

修改顺序后遇到的问题就是因为next()读取到空白符前的数据时结束了,然后把回车“\r”留给了nextLine();所以上面nextLine()没有输出,不输出不代表没数据,是接到了空(回车“/r”)的数据。

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130124.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月27日 下午11:20
下一篇 2022年4月27日 下午11:20


相关推荐

  • 手动创建线程池_创建线程池的5个参数

    手动创建线程池_创建线程池的5个参数一,Executors类不建议使用自带的工具类的!使用JDK自带的Executors工具类(图中蓝色框中的那个,这是独立于线程池继承关系图的工具类,类似于Collections和Arrays)可以直接创建以下种类的线程池线程数量固定的线程池,此方法返回ThreadPoolExecutorpublicstaticExecutorServicenewFixedThreadPool(intnThreads){……}单线程线程池,此方法返回ThreadPoolExecu

    2022年10月1日
    4
  • Netapp存储性能调优

    Netapp存储性能调优一 Volume 参数调整 nas gt voloptionsvo name nosnap on nosnapdir on minra off no atime update on nvfail off snapmirrored off create ucode on convert ucode on maxdirsize 10470 fs size fixed off guarantee volume svo enable

    2026年3月18日
    2
  • 【shell案例】学员管理系统「建议收藏」

    【shell案例】学员管理系统「建议收藏」前言学员管理系统涉及到学员的增删改查,这是一个综合性比较强的项目,在所有的编程语言里都会有不同版本的学员信息管理系统,难度适中效果截图学员管理系统源码#!/bin/bash##随机点名册whiletruedo echo”学生随机点名系统” echo”1.添加学员名单” echo”2.遍历学员名单” echo”3.随机点名” echo”4.删除某个学员的信息” echo”5.退出” read-p”请输入你要选择的序号:”num case

    2026年2月5日
    5
  • Java线程池七个参数详解

    本文参考:https://blog.it-follower.com/posts/1035400434.htmljava多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释。从源码中可以看出,线程池的构造函数有7个参数,分别是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadF…

    2022年4月4日
    75
  • 为什么你学不过动态规划?告别动态规划,谈谈我的经验[通俗易懂]

    为什么你学不过动态规划?告别动态规划,谈谈我的经验[通俗易懂]动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看0-1背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验对于动态规划,春招秋招时好多题都会用到动态…

    2025年7月3日
    6
  • C++ 如何判断一个数为回文数

    C++ 如何判断一个数为回文数如果一个数从左边读和从右边读都是同一个数 就称为回文数解答 思想最简单的方法就是模拟 把各个数位取出来 然后比较 当然这种方法比较麻烦 我们这次要用的方法如下 既然是回文数 那我们把各个数位上的数正着加起来跟逆着加起来的和是一样的 运用这条性质我们就可以很简单的解决这个问题 代码如下 include lt iostream gt usingnamespa

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号