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. Ext.Net中如何获取组件

    我们在编写函数function的时候,常常需要用到页面上的组件.这时候就需要调用组件. 在Ext.net中,调用组件可以用.App.ID.(ID指的是想要调用的组件的ID). 例如: 我写一个函数需要 ...

  2. 用AngularJS操作DOM

    在angular中使用第三方插件时最好都封装到指令(directives)中去,DOM操作也最好都解构到指令中. <!DOCTYPE html> <html lang="e ...

  3. hdu 1575 Tr A (二分矩阵)

    Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. 制作Windows10政府版的小白教程

    制作Windows10政府版的小白教程 https://03k.org/make10entg.html 首先,宿主系统要比操作的系统新,因为低版本dism操作不了: 当然也可以单独下载ADK,提取最新 ...

  5. hdu4418 Time travel 【期望dp + 高斯消元】

    题目链接 BZOJ4418 题解 题意:从一个序列上某一点开始沿一个方向走,走到头返回,每次走的步长各有概率,问走到一点的期望步数,或者无解 我们先将序列倍长形成循环序列,\(n = (N - 1) ...

  6. 淡入淡出效果的js原生实现

    淡入淡出效果,在日常项目中经常用到,可惜原生JS没有类似的方法,而有时小的页面并不值得引入一个jQuery库,所以就自己写了一个,已封装, 有用得着的朋友, 可以直接使用. 代码中另附有一个设置元素透 ...

  7. git使用笔记(十)杂项

    By francis_hao    Nov 27,2016   删除不被版本控制的文件 删除没有被git追踪的文件,当然,被ignore的文件不会被删除. git clean -f   查看文件的每一 ...

  8. yaf学习网站

    http://www.01happy.com/php-yaf-ext-business/

  9. 7月24号day16总结

    一开始显示出现问题,js路径不能应用,因为用的是springMVC框架书写,所以有路径的保护和静态引用地址时需要注意的地方 今天进行了最后项目的优化,包括map清洗数据部分的代码和echarts显示的 ...

  10. Spring Framework框架解析(1)- 从图书馆示例来看xml文件的加载过程

    引言 这个系列是我阅读Spring源码后的一个总结,会从Spring Framework框架的整体结构进行分析,不会先入为主的讲解IOC或者AOP的原理,如果读者有使用Spring的经验再好不过.鉴于 ...