Scanner类简介:

  Java 5添加了java.util.Scanner类,我们可以通过Scanner类来获取用户输入。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器。

基本语法:

 import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 从键盘接收数据
// nextInt方式接收字符串
System.out.println("nextInt方式接收:");
// 判断是否还有输入
if (scan.hasNextInt()) {
int i = scan.nextInt();
System.out.println("输入的数据为:" + i);
}
scan.close();
}
}
// 假如用户输入数据为:10,那么该程序结果为:
// 输入的数据为:10

部分API方法:

其实上图的意思就是,比如:nextlnt():只读取int值,就是只能读取整数类型的数据,如果输入了非整型的数据(浮点型字符串等)就会报错。nextFloat()、nextDouble()这些也是以此类推,只能读取符合该类型的数据。

 常用三个方法区别(next()、nextLine()、nextInt()):

  ①nextInt()只读取数值,读取完后\n没有读取并且光标放在本行

Scanner sc=new Scanner(System.in);

int i=sc.nextInt();

  ②next()方法遇到第一个扫描有效字符,即第一个非空格非换行符后面开始,一直获取到下一个空格,换行符之前的,单个字符串

Scanner sc=new Scanner(System.in);

int i=sc.next();

  ③nextLine()可以扫描到一行内容并作为一个字符串而被获取到

Scanner sc=new Scanner(System.in);

int=sc.nextLine();
使用nextInt()、nextLine()出现的小问题及解决方法:

当Scanner对象同时使用nextInt()和nextLine()方法时,会出现nextLine()没有任何输出内容,如下代码:

 import java.util.Scanner;
public class ScannerText{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字");
// 接收输入的数字
int number = sc.nextInt();
System.out.println("请输入字符串");
// 接收输入的字符串
String str = sc.nextLine();
System.out.println("number:"+number+", str:"+str);
}
}

结果:

请输入数字
10
请输入字符串
number:10, srt:
// 可以发现,当我们刚按照提示输入数字并回车时(我输入的是10并回车),代码直接执行到最后并结束了,这是为什么呢?

因为:

  nextInt():是键盘录入整数的方法,当我们录入10 并回车的时候,其实在键盘上录入的是10和\r\n,nextInt()方法只获取到10就结束了

  nextLine():是键盘录入字符串的方法,可以接受任意类型,但是他凭什么能获取一行呢?是通过\r\n,只要遇到\r\n就证明一行结束

所以:

  在上述代码示例操作中,当我们输入10并回车的时候,nextInt()在我们输入10的时候就结束录入,而剩下的\r\n正好遇到nerxtLine()方法,并且还是该方法的结束证明,所以,我们还没按照提示输入字符串程序就已经结束;

解决方案一:

在输入第二次字符串的时候,在new一个Scanner对象(但是这种比较消耗内存资源,不推荐)

 import java.util.Scanner;
public class ScannerText{
public static void main(String[] args){
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入数字");
// 接收输入的数字
int number = sc1.nextInt();
System.out.println("请输入字符串");
// 在输入第二次字符串的时候,再new一个scanner对象
Scanner sc2 = new Scanner(System.in);
// 接收输入的字符串
String str = sc2.nextLine();
System.out.println("number:"+number+", str:"+str);
}
}

解决方案二:

不管是数字还是字符串,都统一用nextLine()方法接收,接收之后在将结果进行处理,如果需要是int数据,将其结果转成int就ok

 import java.util.Scanner;
public class ScannerText{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字");
// 用String类型接收输入的数字
String str1 = scanner.nextLine();
// 将String类型转换成int/Integer类型
int i = Integer.valueOf(str1);
// 查看数据类型
System.out.println("数据类型是:"+Integer.valueOf(str1).TYPE);
}
}

结果:

 请输入数字
10
数据类型是:int

Scanner对象及其获取数据出现小问题和解决方案的更多相关文章

  1. 通过Scanner从控制台获取数据

    ----------siwuxie095 Scanner类用于扫描从控制台输入的数据,可以接收字符串和基本数据类型的数据 Scanner类位于 java.util.Scanner 包中 Scanner ...

  2. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  3. sql异常 获取数据失败的原因及解决方案

    使用dbutils工具类时 不能使用char作为sql的字段类型 报错提示不能转换 所以替换成别的(一般是String)即可

  4. XMLHTTPRequest对象不能跨域获取数据?!

    写了一小段代码,是用XMLHTTPRequest对象来获取数据的,在本地服务器中,运行的很顺利,但是转向实际服务器(实质上就是转向http://gumball.wickedlysmart.com获取一 ...

  5. EL表达式获取数据

    EL 全名为Expression Language. EL主要作用 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 ...

  6. Request对象主要用于获取来自客户端的数据,如用户填入表单的数据、保存在客户端的Cookie等。

    1.主要属性  ApplicationPath  获取服务器上asp.net应用程序的虚拟应用程序根路径  Browser  获取有关正在请求的客户端的浏览器功能的信息,该属性值为:HttpBrows ...

  7. 第五章 “我要点爆”微信小程序云开发实例之从云端获取数据制作首页

    下面我们来实现从云端获取数据,完成首页世界页面index的制作,首页分为4个数据列表导航页面,页面具体内容如下: 推荐:为用户推荐最新的点爆信息,它包含文本点爆内容和语音点爆内容. 文爆:筛选出文字点 ...

  8. 微信小程序 存储数据到本地以及本地获取数据

    1.wx存储数据到本地以及本地获取数据 存到本地就是存到你的手机 wx.setStorageSync与wx.setStorage 1.1 wx.setStorageSync(string key, a ...

  9. 微信小程序:wx.request之post请求后端无法获取数据的问题

    前言:小程序的开发中总是踩到各种坑,看文档也不知所云: 例如当我们在写微信小程序接口时,method请求方式有POST和GET两种,为了数据安全,我们会偏向于使用POST请求方式访问服务器端: 问题: ...

随机推荐

  1. Java基础系列--冒泡排序

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9064218.html 1.算法简介 冒牌排序是很耳熟的排序方式,虽然它使用的很少,但是经 ...

  2. DD XOFT虚拟键盘鼠标

    下载:http://www.ddxoft.com/ 简介:最多用户选择,最简单易用,最稳定可靠 永久免费 系统底层集成,真正的驱动级硬件模拟 一键安装,即为电脑添加一对可完全编程控制的键盘鼠标,轻松自 ...

  3. 用Java为Hyperledger Fabric(超级账本)开发区块链智能合约链代码之部署与运行示例代码

    部署并运行 Java 链代码示例 您已经定义并启动了本地区块链网络,而且已构建 Java shim 客户端 JAR 并安装到本地 Maven 存储库中,现在已准备好在之前下载的 Hyperledger ...

  4. 在tomcat下部署两个或多个项目时 log4j和web.xml配置webAppRootKey 的问题(转)

    在tomcat下部署两个或多个项目时 web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为"webapp.root",如下: <!-- 应用路径 ...

  5. noip 2015 斗地主 大爆搜!!!

    反正肯定是大模拟 但是每一个可以出的牌都搜一定不是最优的 考虑最特殊的出牌方案:顺子(单,对,三) 每一种方案再加上暴力贪心打出剩下的牌的步数 #include<cstdio> #incl ...

  6. vue iview UPload,但文件上传是,clearFiles的使用方法

    <template> <div> <button @click="clearUploadedImage">重新上传</button> ...

  7. HTTP VISUAL HTTP请求可视化工具、HTTP快照工具(公测)

    先啰嗦几句,最近工作比较忙,再加上自己又开设了一个小站(简单点),没时间写博客,都快憋坏了,趁着周末有时间,抓紧来一篇~ HTTP VISUAL是一款HTTP可视化工具,它可以记录HTTP请求,包括请 ...

  8. DCGAN 代码简单解读

    之前在DCGAN文章简单解读里说明了DCGAN的原理.本次来实现一个DCGAN,并在数据集上实际测试它的效果.本次的代码来自github开源代码DCGAN-tensorflow,感谢carpedm20 ...

  9. 滴滴 App 的质量优化框架 Booster,开源了!

    一. 序 当 App 达到一定体量的时候,肯定是要考虑质量优化.有些小问题,看似只有 0.01% 触发率,但是如果发生在 DAU 过千万的产品中,就很严重了. 滴滴这个独角兽的 DAU 早已过千万,自 ...

  10. Detours HOOK 库 过滤LoadLibraryExW

    Detours HOOK 库 Hook 过滤LoadLibraryExW 一丶简介 1.1 Detours库简介 Detours是微软提供的HOOK库.为我们Hook提供了方便.再也不用手撸 HOOK ...