Scanner类介绍:

继续做笔记,之前学过的基本语法中,并没有实现程序和人的交互,但是Java给我们提供了一个工具类,我们可以通过Scanner类来获取用户的输入

Scanner 类也位于 java.util包下面,使用前要先import java.util.Scanner. 而java.util.Scanner是Java5的新特征,这个类最实用的地方表现在获取控制台输入,主要功能是简化文本扫描。

使用方法

只要通过 new Scanner(System.in)创建了一个新的Scanner; 控制台就会卡住,一直等待接收用户输入Enter才会把接收到的内容传给Scanner处理,程序往下运行。

而Scanner类的 next()nextLine() 方法都可以获取到用户输入的内容。

两者的区别在于next()获取到的是空格前的内容,nextLine得到的则是整行Enter前的内容。

next()示例:

package com.zctou.scanner;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        //Scanner的标准用开头,new 一个对象并打开IO流
        Scanner scanner = new Scanner(System.in);
        //hasNext()方法判断接收情况,程序会卡住等待用户输入
        if(scanner.hasNext()) {
            //看haxNext()输出
            System.out.println(scanner.hasNext());
            //接收用户输入的内容
            String  str = scanner.next() ;
            System.out.println(str);
        }

        //结束前要关闭IO流
        scanner.close(); //对应new Scanner(System.in)。
    }
}

输出:

          //用户输出空格,控制台要求再次输入
 //用户直接'Enter',控制台还是要求重新输入
          hello zctou.com //用户输入有效字符串
true //hasNext()输出 true
hello //只输出部份字符串
可以看到,程序只输出了hello,也就是next()方法是以 " "(空格)为结束符的,且hello两边的空格被自动删除,相当于js,php中的 trim()函数。

也就是说next()方法只能接收 部份 字符串,且Enter(回车)和 (空格)皆为无效字符串。程序强制要求用户输入内容

 nextLine()示例:

package com.zctou.scanner;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in) ;
        //对应的是 nextLine()方法,顾名思义,接收行
        if(scanner.hasNextLine()) {
            //看hasNextLine()输出什么
            System.out.println(scanner.hasNextLine());
            //接收用户输入的内容
            String str = scanner.nextLine() ;
            System.out.println(str);

        }

        scanner.close(); //同样结束scanner的io流
    }
}

输出:

               //用户输入一串空格
true //hasNextLine()输出 true
               //程序返回一串空格 
----------------------
 //用户直接Enter
true //hasNextLine()输出 true
 //程序同样没卡住要求重新输入字符串
----------------------
          hello zctou.com  \n zctou \r zctou //用户输出
true //hasNextLine()输出 true
          hello zctou.com  \n zctou \r zctou //程序输出
可以看到,nextLine()是把程序接收的所有内容全部传给scanner输出,这一行是以Enter (回车)结束,并非以换行符为结束符。同时 nextLine()方法能获取到' '空格。

next()对比,netxLine()方法可以接收空字符串,返回的是Enter前的所有字符串,没有则为空,不强制要求用户输入有效字符。

结论:

  • scanner.next() 方法要求用户输入有效字符,程序才会往下执行。也就是说scanner.hasNext()肯定为true。
  • scanner.nextLine()方法虽然对用户输出的字符没任何要求,但用户不输入或者输入空字符串,程序还是会往下执行,所以scanner.hasNextLine() 也肯定为true。

上面两例子中的判断hasNextLine()hasNext()暂时看来毫无意义。

文章目录