sc.next在java什么意思_sc.next() 和 nextLine 的原理
对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 的原理相关推荐
- 优秀的Java程序员必须了解GC的工作原理
一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...
- 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. 动态参 ...
- Java 并发编程——Executor框架和线程池原理
Java 并发编程系列文章 Java 并发基础--线程安全性 Java 并发编程--Callable+Future+FutureTask java 并发编程--Thread 源码重新学习 java并发 ...
- 深入Java集合学习系列:ArrayList的实现原理
参考文献 深入Java集合学习系列:ArrayList的实现原理 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/20 ...
- 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 ...
- Java并发编程包中atomic的实现原理
转载自 Java并发编程包中atomic的实现原理 这是一篇来自粉丝的投稿,作者[林湾村龙猫]最近在阅读Java源码,这一篇是他关于并发包中atomic类的源码阅读的总结.Hollis做了一点点修 ...
- 深入Java集合学习系列:LinkedHashSet的实现原理
转载自 深入Java集合学习系列:LinkedHashSet的实现原理 1. LinkedHashSet概述: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现 ...
- Java多线程系列(七):并发容器的原理,7大并发容器详解、及使用场景
之前谈过高并发编程系列: 高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 高并发编程系列:CountDownLatch.Semaphore等4大并发工具类详解 高并发编程系列:4大J ...
- Java多线程系列(八):ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)
HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...
最新文章
- Vue 生命周期记录_学习笔记
- 状态估计问题学习记录(1)
- RxSwift UI控件扩展
- mysql存储过程核销_mysql存储过程
- 当心币圈高仿号!也别指望AI,它有心无力
- 美国欲投 2.58 亿美元与中国争夺超算霸主地位
- 怎么自动运行文件并隐藏_绝对实用!iphone用久卡顿怎么办?5个隐藏小技巧提升运行速度...
- 一个百分号%引起的事故
- 【Web 开发】第1章 概论
- 网易云课堂资源合集百度云分享
- snort:Packet结构体详解(留坑)
- 疫情期间的中老年众生相:刷抖音/云买菜/直播购物,加速“触网”
- 用matlab微分方程求解,用MATLAB求解微分方程
- 什么是高质量的代码--整理的网上博文
- H5唤起web地图导航
- 罗技蓝牙鼠标连接电脑教程
- 对Numpy库ndarray对象(矩阵)中的数据元素的访问、选取操作示例
- 计算机网络三大总线,计算机总线分为哪三种?
- 火绒安全v5.0.45 附单文件版
- Echarts实现堆叠图