对java的Scanner类的next开头的相关类有点纠结,看了一些博客大致懂了,整理下

代码事例直接参考了这位大佬的

https://blog.csdn.net/long71751380/article/details/9400835

1. 总的原理

以一段代码为例,scanner类

import java.util.Scanner;

public class Next {

public static void main(String[] args) {

String s1, s2;

Scanner sc = new Scanner(System.in);

System.out.println("请输入第一个字符串:");

s1 = sc.nextLine();

System.out.println("请输入第二个字符串:");

s2 = sc.next();

System.out.println("输入的字符串是:" + s1 + " " + s2);

}

}

1.1 new Scanner(System.in)

以控制台为例,此时会提供控制台输入,输入的字符会到某缓存通道中A(也不知道专业名词叫什么)

继续执行后面的代码

1.2 sc.nextLine()

此时会从缓存通道A中开始读取数据,通道A中的游标(也不知道专业名词叫什么)初始位置为缓存通道A最前面,此时程序运行到nextLine(),该方法会做两件事情。

一是读取起始符到结束符中的数据,二是游标移动到结束符后(相当于把这段数据清空)

image.png

运行结果

(该部分引用那个博主例子start)

请输入第一个字符串:

ss

请输入第二个字符串:

dd

输入的字符串是:ss dd

但如果把程序改一下, s1=sc.next(); s2=sc.nextLine();

import java.util.Scanner;

public class Next {

public static void main(String[] args) {

String s1, s2;

Scanner sc = new Scanner(System.in);

System.out.println("请输入第一个字符串:");

s1 = sc.next();

System.out.println("请输入第二个字符串:");

s2 = sc.nextLine();

System.out.println("输入的字符串是:" + s1 + " " + s2);

}

}

运行结果

请输入第一个字符串:

ss

请输入第二个字符串:

输入的字符串是:ss

可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。经过验证,我发现其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题,解决的办法是:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。例如上面的程序改写为:

import java.util.*;

public class Next {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

System.out.println("请输入第一个字符串");

String s1=sc.next();

sc.nextLine();

System.out.println("请输入第二个字符串");

String s2=sc.nextLine();

System.out.println("输入的字符串是"+s1+" "+s2);

}

}

(该部分引用那个博主例子end)

sc.next在java什么意思_sc.next() 和 nextLine 的原理相关推荐

  1. 优秀的Java程序员必须了解GC的工作原理

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...

  2. atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97

    atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...

  3. Java 并发编程——Executor框架和线程池原理

    Java 并发编程系列文章 Java 并发基础--线程安全性 Java 并发编程--Callable+Future+FutureTask java 并发编程--Thread 源码重新学习 java并发 ...

  4. 深入Java集合学习系列:ArrayList的实现原理

    参考文献 深入Java集合学习系列:ArrayList的实现原理 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/20 ...

  5. java swing调用H5_atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97...

    atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1.实现html5化界面的要解决的策略 1.1.Js交互 Firefox与Chro ...

  6. Java并发编程包中atomic的实现原理

    转载自   Java并发编程包中atomic的实现原理 这是一篇来自粉丝的投稿,作者[林湾村龙猫]最近在阅读Java源码,这一篇是他关于并发包中atomic类的源码阅读的总结.Hollis做了一点点修 ...

  7. 深入Java集合学习系列:LinkedHashSet的实现原理

    转载自  深入Java集合学习系列:LinkedHashSet的实现原理 1.    LinkedHashSet概述: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现 ...

  8. Java多线程系列(七):并发容器的原理,7大并发容器详解、及使用场景

    之前谈过高并发编程系列: 高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 高并发编程系列:CountDownLatch.Semaphore等4大并发工具类详解 高并发编程系列:4大J ...

  9. Java多线程系列(八):ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

    HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...

最新文章

  1. Vue 生命周期记录_学习笔记
  2. 状态估计问题学习记录(1)
  3. RxSwift UI控件扩展
  4. mysql存储过程核销_mysql存储过程
  5. 当心币圈高仿号!也别指望AI,它有心无力
  6. 美国欲投 2.58 亿美元与中国争夺超算霸主地位
  7. 怎么自动运行文件并隐藏_绝对实用!iphone用久卡顿怎么办?5个隐藏小技巧提升运行速度...
  8. 一个百分号%引起的事故
  9. 【Web 开发】第1章 概论
  10. 网易云课堂资源合集百度云分享
  11. snort:Packet结构体详解(留坑)
  12. 疫情期间的中老年众生相:刷抖音/云买菜/直播购物,加速“触网”
  13. 用matlab微分方程求解,用MATLAB求解微分方程
  14. 什么是高质量的代码--整理的网上博文
  15. H5唤起web地图导航
  16. 罗技蓝牙鼠标连接电脑教程
  17. 对Numpy库ndarray对象(矩阵)中的数据元素的访问、选取操作示例
  18. 计算机网络三大总线,计算机总线分为哪三种?
  19. 火绒安全v5.0.45 附单文件版
  20. Echarts实现堆叠图

热门文章

  1. [基础篇]ESP32-RTOS-SDK教程(一)之Windows环境搭建
  2. 记账本开发小计(四)
  3. maven02-----Maven项目构建的初次使用
  4. 操作系统文件编程知识
  5. C语言第三次博客作业---单层循环结构
  6. git push/pull时总需要输入用户名密码的解决方案
  7. GIT的PUSH指令
  8. 文本框输入怎么样让键盘消失
  9. TOJ 3046: 招商银行网络系统
  10. Apple着手抛弃32位macOS应用程序