2017-11-02 16:33:11

Scanner类:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

*构造方法

*常用方法

基本格式:hasNextXxx():判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,可以省略Xxx。

    nextXxx():获取下一个输入项。

默认情况下,Scanner使用空格,回车作为分隔符(也就是在读取的时候默认跳过这两个字符,不进行读取)。在敲入回车后,将当前缓冲区的内容交给Scanner进行扫描(包括回车符\r\n)。

常用的有Public int nextInt(),Public String nextLine()。

先获取数值类型,再获取字符串类型会出现问题。这个问题在C++中也遇到过。

原因解析:当敲完数字并回车时,此时缓冲区内的数据是数字加上回车符,在Scanner扫描的时候,把数字交给了x,由于是使用的nextline,导致也会读取回车字符,所以把回车符交给了y,导致了这种情况。

public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //y会为空
int x=sc.nextInt();
String y=sc.nextLine(); System.out.println(x+y);
}

解决方法:

A:重定义一个扫描器

B:先全部使用字符串获取,再转换

public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //y会为空
int x=sc.nextInt(); Scanner sc2 = new Scanner(System.in);
String y=sc2.nextLine(); System.out.println(x+y);
}

如果把nextline换成next就没有问题了,no zuo no die啊,哈哈。

        Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
String s = sc.next();
System.out.println(x + s);

 一些测试:

1)新定义的Scanner是否会把前一个的缓冲区给破坏

        Scanner sc = new Scanner(System.in);
System.out.println(sc.nextInt());
Scanner sc2 = new Scanner(System.in);
System.out.println(sc2.nextInt());
System.out.println(sc.nextInt());

结论:不会,前一个缓冲区内容已经交给了sc,新创建的sc2读取的是自己的缓冲区内容。

2)next读取字符串是否会读到换行符

        Scanner sc = new Scanner(System.in);
System.out.print(sc.next());
System.out.print(sc.next());
System.out.println("是否读到了换行符");

结论:不会,会自动跳过空格和换行符。

Java 常用对象-Scanner类的更多相关文章

  1. Java常用API(Scanner类)

    Java常用API( Scanner类)1 1.Scanner类 首先给大家介绍一下什么是JavaAPI API(Application Programming Interface),应用程序编程接口 ...

  2. Java 常用对象-Math类

    2017-11-02 21:26:18 Math类:Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. *属性摘要 *常用方法 random() : 返回[0.0,1.0 ...

  3. Java 常用对象-Date类和Calender类

    2017-11-02 22:29:34 Date类:类 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值 ...

  4. Java 常用对象-System类

    2017-11-02 21:41:06 System类:System 类包含一些有用的类字段和方法.它不能被实例化. *常用方法 public static void gc() 运行垃圾回收器. 调用 ...

  5. Java 常用对象-String类

    2017-11-02 20:02:06 String:代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能 ...

  6. Java 常用对象-Object类

    2017-10-31 23:42:08 Object类:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法. 或者说,每个类都直接或者间 ...

  7. Java 常用对象-BigInteger类

    2017-11-02 21:57:09 BigInteger类:不可变的任意精度的整数.所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型).BigInteger ...

  8. Java 常用对象-StringBuffer类

    2017-11-02 20:57:02 StringBuffer:线程安全的可变字符序列.一个类似于 String 的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某些 ...

  9. Java Character & String & Scanner类

    Character类 Character 类用于对单个字符进行操作. Character 类在对象中包装一个基本类型 char 的值 char用法: char ch = 'a'; // Unicode ...

随机推荐

  1. Javascript--普通函数调用-涨工资计算函数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. python绘图之seaborn 笔记

    前段时间学习了梁斌老师的数据分析(升级版)第三讲<探索性数据分析及数据可视化>,由于之前一直比较忙没有来得及总结,趁今天是周末有点闲暇时间,整理一下笔记: 什么是seaborn Seabo ...

  3. pycharm 设置文件编码的位置:Editor-->File Encodings

    打开设置-->Editor-->File Encodings 

  4. linux 中的定时任务crontab使用方法

    linux 中的定时任务crontab使用方法: 切换到root用户,sudo su root (可以设置成不需要输入密码) sudo su - (需要输入当前帐号的密码才能进入.) crontab ...

  5. HTML5 manifest离线缓存技术

    干什么用的? 离线缓存为的是第一次请求后,根据manifest文件进行本地缓存,并且在下一次请求后进行展示(若有缓存的话,无需再次进行请求而是直接调用缓存),最根本的感觉是它使得WEB从online可 ...

  6. Oracle提示错误消息ORA-28001: the password has expired

    首先,以SYS DBA身份进入sqlpuls 打开sqlpuls SQL->请输入用户名:sys as sysdba SQL->密码: 登录成功以后查询DBA用户状态 SQL->se ...

  7. 写给java程序员的c++与java实现的一些重要细微差别-附完整版pdf学习手册

    0.其实常规的逻辑判断结构.工具类.文件读写.控制台读写这些的关系都不大,熟悉之后,这些都是灵活运用的问题. 学习c/c++需要预先知道的一个前提就是,虽然有ANSI C标准,但是每个c/c++编译器 ...

  8. C++设计模式(第一周)

    part 1 设计模式简介 课程目标 1.理解松耦合设计思想 2.掌握面向对象设计原则 3.掌握重构技法改善设计 4.掌握GOF 核心设计模式 什么是设计模式? “每一个模式描述了一个在我们周围不断重 ...

  9. 20145212罗天晨 逆向及Bof基础实践

    20145212罗天晨<网络对抗>第1周学习总结--逆向及Bof基础实践 逆向及Bof基础实践 一.实践目标 1.运行原本不可访问的代码片段 2.强行修改程序执行流 3.以及注入运行任意代 ...

  10. linux内核分析 第7章读书笔记——《深入理解计算机系统》

    第七章 链接 --<深入理解计算机系统> 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 一.编译器 大多数编译系统提供编译驱动 ...