Scanner类读取键盘输入(java中Scanner类nextLine()和next()的区别和使用方法&&java 中的Scanner(非常详细不看后悔)):

2017/3/18 在使用这个类时一直有个疑惑,我不明白这个类读取输入是怎么判断输入结束的...., 今天使用时一直在读取命令行的输入,像个智障一样. 感觉还是没有搞明白这个类的具体用法,现在来分析一番

import java.util.Scanner;

class Shuchu{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
}
}

上面的代码运行的结果如下:

可以看到 Scanner sc = new Scanner(System.in); 这里并没有造成线程等待,我原来以为会 等待键盘的输入,有意思的是在 String name = sc.nextLine() 这里它在等待键盘的输入, 并且遇到enter键时判断输入结束...,  由此推断出来的结论是 Scanner sc = new Scanner(System.in) 这里 只是实例化了一个以键盘输入为数据源的Scanner对象而已, 还没有开始使用这个玩意儿. 真正使用它的是调用它的一系列next方法, 此时才从键盘读取输入并根据不同的输入符号来判断输入是否结束.比如nextLine()方法就是 遇到 回车 时判断输入结束,返回当前行的其余部分, 不包括结尾处的行分隔符,当前位置移至下一行的行首. nextInt()方法将输入信息的下一个标记扫描为一个 int, 遇到回车返回当前行, 当前位置移至下一行的行首.其余的nextFloat(), nextString() 方法同理.

有两个方法值得注意定位是:hasNext()和next().hasNext()方法的作用是让Scanner从命令行读取输入,还是以回车结束(准确的说是遇到回车返回当前行). 类似其余的next() 方法, 只不过返回值是Boolean型, 而一般的nextXX()方法返回的是键盘的输入值, 可以利用这个方法来从键盘循环读取输入, 不过会造成无限循环, 会一直从键盘读取输入....汗..., 这个时候按 ctrl+C 结束输入. 注意,这是输入,而不是对控制台进行操作。这相当于向控制台输入一个字符,这个字符代表EOF,此时hasNext()方法返回false,循环结束。如果是 sc.hasNext()方法的话, 键盘的输入全部都读到sc里去了(包括回车), 并且当前位置并未移动, 然后再 sc.next()方法的话便可以返回sc里的内容, 同样的会遇到回车符, 然后返回当前行. next()方法默认以空格符号作为输入多个词的空格符, 意思就是 如果在.hasNext()方法输入的是 “11 11 11回车” 的话, next()方法返回的是:

  11

后面两个11 并未返回.

注意nextInt()方法和next()方法默以空格分割(我估计其余的nextXXX()方法也是这样,当然默认分割符号可以改), 所以会出出现下面的情况:


至此,总算是搞明白了Scanner这个类的一些用法了, 回答我开始的问题顺便总结下:

1. 判断输入结束--- 与其说是判断输入结束倒不如说是 遇到特定符号返回当前输入, 默认是enter回车符号.

2. 大致过程是 Scanner对象先读取输入, 然后用个当前位置标记一样的东西, 利用nextXXX() 方法从开始往后面扫描, 返回扫描的内容,移动标记位置.  nextLine() 扫描到回车键为止, 返回当前行, 当前位置移至下一行的行首.  nextInt()方法将扫面到的内容标记为int 遇到分割符或者回车符返回, 移动位置标记. 此后再调用nextXXX()方法便在当前的位置标记基础上,继续往后扫描.

以上个人揣测部分太多......, 如果有错误的话希望大家指点指点下, 共同学习共同进步哈.

Scanner类的个人分析的更多相关文章

  1. java中scanner类的用法

    在Eclipse中编写程序时,如果我们的变量是需要手动输入的时候,我们就可以用到scanner类了. Scanner类,这是一个用于扫描输入文本的新的实用程序.由于任何数据都必须通过同一模式的捕获组检 ...

  2. Java API ——Scanner类

    1.Scanner类概述 JDK5以后用于获取用户的键盘输入,一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器.Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空 ...

  3. Scanner类、Random类、ArrayList 类

    1.1 什么是Scanner类一个可以解析基本类型和字符串的简单文本扫描器. 例如,以下代码使用户能够从 System.in 中读取一个数: Scanner sc = new Scanner(Syst ...

  4. Java中的引用类型Scanner类和随机类型Random

    Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型.   引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. ...

  5. 12-01 Java Scanner类,Scanner类中的nextLine()产生的换行符问题

    分析理解:Scanner sc = new Scanner(System.in); package cn.itcast_01; /* * Scanner:用于接收键盘录入数据. * * 前面的时候: ...

  6. 交互程序 Scanner类

    交互程序 1. Scanner类是标准Java类库的类 (1)提供一些方法用于交互式读入不同类型的输入数据,输入可以是不同的数据源,包括用户键入的数据和保存在文件中的数据(怎么弄). (2)将一个字符 ...

  7. 01 语言基础+高级:1-3 常用API第一部分_day07【Scanner类、Random类、ArrayList类】

    day07[Scanner类.Random类.ArrayList类] Scanner类Random类ArrayList类 教学目标 能够明确API的使用步骤能够使用Scanner类获得键盘录入数据能够 ...

  8. Scanner 类

    Java Scanner 类 java.util.Scanner 是 Java5的新特征,我们可以通过 Scanner 类来获取用户的输入. 基本语法: Scanner sc = new Scanne ...

  9. Scanner类

    Scanner类:用于获取用户的键盘输入 成员方法: public boolean hasNextXxx():判断是否某种类型的元素 public Xxx nextXxx():获取该元素 常用方法: ...

随机推荐

  1. 最小生成树(MST)

    原创 今天来说说最小生成树问题,我们知道最小生成树有两种求法,一种是prim算法,另一种是kruskal算法,关于两种算法的定义以及证明,请查看相关资料,这里不多说,理解起来也相当容易,我们来看一个问 ...

  2. LTE:上行调度请求(Scheduling Request,SR) LTE:下行资源分配类型

    http://blog.sina.com.cn/s/blog_927cff010101a7yh.html 上行调度请求(Scheduling Request,SR) 如果UE没有上行数据要传输,eNo ...

  3. iOS银联,支付宝,微信,ping++开发文档

    银联支付 银联支付目测只需两个参数 1.tn 其实就是订单号 2.mode 是测试环境还是线上环境 开发步骤 1.首先客户端浏览商品,点击下单,请求到达商户后台 2.商户后台在提交订单信息到银联后台 ...

  4. 【EasyNetQ】- 发送接收

    发布/订阅和请求/响应模式是位置透明的,因为您不需要指定消息的使用者所在的位置,而发送/接收模式专门用于通过命名队列进行通信.它也不会假设可以通过队列发送的消息类型.这意味着您可以通过同一队列发送不同 ...

  5. WebKit 渲染过程

    webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 Webkit渲染过程 ...

  6. Div+Css制作圆

    Div+Css制作四分之一圆主要是使用Css3.0中的border-radius这个圆角隐藏属性.利用这一属性,我们可以画圆,画半圆,四分之三圆,四分之一圆等.以后我会更新…… 如何使用border- ...

  7. hdu 1853 Cyclic Tour (二分匹配KM最小权值 或 最小费用最大流)

    Cyclic Tour Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Total ...

  8. [洛谷P2384]最短路

    题目大意:给你一个图,要你求出其中1->n路径中乘积最小的一条路 题解:用$log_2$把乘法变成加法,然后记录每个点的前驱,最后求出答案 C++ Code: #include<cstdi ...

  9. cf 442 D. Olya and Energy Drinks

    cf 442 D. Olya and Energy Drinks(bfs) 题意: 给一张\(n \times m(n <= 1000,m <= 1000)\)的地图 给出一个起点和终点, ...

  10. 安徽师大附中%你赛day3T1 怜香惜玉 解题报告

    怜香惜玉 题意: 已知 \(f(x)=\frac{2 \times \sum_{(i,x)=1}^x i}{φ(x)}\) 先给定数据组数\(t\)和\(k\) 每组数据给出\(n\),求\(\sum ...