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. Javascript-涨工资案例

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

  3. Integer类之成员变量

    一.一共11个成员变量. 二.详情介绍. 1.value值.这个是Integer类的唯一标志.最重要的实例属性. 2.最小值和最大值常量.注意,计算机里面是以补码形式保存的,因此用十六进制时,给的数据 ...

  4. 026-chmod命令

    语法# chmod [ 选项参数 ]  选择修改权限的对象   权限的改变   目标文件 语义:对哪些目标文件的哪些权限进行修改. (1)# chmod -R ugo +r /home/apple.将 ...

  5. Node.js最新技术栈之Promise篇

    前言 大家好,我是桑世龙,github和cnodejs上的i5ting,目前在天津创业,公司目前使用技术主要是nodejs,算所谓的MEAN(mongodb + express + angular + ...

  6. linux测试带宽命令,Linux服务器网络带宽测试iperf

    linux测试带宽命令,Linux服务器网络带宽测试iperf必须先运行iperf serveriperf -s -i 2客户端iperf -c 服务端IP地址 iperf原理解析 iperf工具可以 ...

  7. (iOS)关于键盘遮挡textfield问题

    记录一下自己经常遇到问题.使用textfield(textview).当输入框位置比较靠下时,弹出的键盘会遮挡输入框,这是就需要动态移动输入框编辑状态时self.view的位置, 自己经常用的方法有两 ...

  8. Centos文件切割利器_split命令及cat命令合并文件

    有个文件要处理,因为很大,所以想把它切成若干份,每份N行,以便并行处理.split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,为提高可读性,生成日志等 命令格式 -b:值为 ...

  9. JavaScript 中语法规范及调试

    JavaScript 中语法规范及调试 版权声明:未经博主授权,内容严禁分享转载 JavaScript 开发环境 JavaScript 脚本可以使用任意一款纯文本编辑器进行编程开发. 常见的前端开发编 ...

  10. CSS3实现小黄人动画

    转载请注明出处,谢谢! 每次看到CSS3动画就心痒痒想试一下,记得一个多月前看了白树哥哥的一篇博客,突然开窍,于是拿他提供的demo试了一下,感觉很棒!下图为demo提供的动画帧设计稿. 自己也想说搞 ...