JAVA学习Day03——通过Scanner实现人机交互

Scanner

这个类在API中为util包下的一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。
A Scanner分隔符模式将输入打破到令牌,默认情况下匹配空格。 然后可以使用各种next方法将得到的令牌转换成不同类型的值。

这个类最实用的地方表现在获取控制台输入
通过Scanner 参数名称=new Scanner(System.in)创建一个Scanner类,控制台会等待输入,敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的各种next方法即可。
例如,nextInt允许用户从System.in读取一个数字:

 Scanner sc = new Scanner(System.in);
 int i = sc.nextInt();

next()

查找并返回此扫描仪的下一个完整令牌
使用next()需要注意:

1. 一定要读取到有效字符后才可以结束输入。
2. 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
4. next() 不能得到带有空格的字符串。

下面上代码:

public class note {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个数字串:");
//        next()类型不能接收有空格的字符串
        String str=scanner.next();
        System.out.println("请输入一个数字:");
//        nextInt只能接受int类型的字符,如果输入类型不对会导致InputMismatchException异常
        int input=scanner.nextInt();
        System.out.println(str);
        System.out.println(input);
    }
}
控制台:
请输入一个数字串:
abcd
请输入一个数字:
123
abcd
123

如果输入了带空格的字符串,结果如下:

在这里插入图片描述

nextLine()

将此扫描仪推进到当前行并返回跳过的输入。
使用nextLine()需要注意:

1、以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。

        System.out.println("请输入:");
        String s=scanner.nextLine();
        System.out.println(s);
控制台:
请输入:
 a a d a
 a a d a 

很明显,nextLine()可以获得空格,并不会因为空格而提前中止输入。

public class note {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个数字串:");
        String str=scanner.next();
        System.out.println("请输入一个数字:");
        int input=scanner.nextInt();
        System.out.println("请输入:");
        String s=scanner.nextLine();
        System.out.println(str);
        System.out.println(input);
        System.out.println(s);
    }
}
控制台:
请输入一个数字串:
231das
请输入一个数字:
121
231das
121
请输入:

控制台会提前结束本次输入,也就是这种方法可能会在等待输入扫描时阻塞,即使以前的调用hasNext()返回了true 。是因为next()、nextInt()往往会读取部分数据(会留下"\n"或者空格之后的数据)。

注意:如果想要在nextInt()后读取一行,就得在nextInt()之后额外加上scanner.nextLine()

public class note {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个数字串:");
        String str=scanner.next();
        System.out.println("请输入一个数字:");
        int input=scanner.nextInt();
        //加入nextLine()
        scanner.nextLine();
        System.out.println("请输入:");
        System.out.println(str);
        System.out.println(input);
        String s=scanner.nextLine();
        System.out.println(s);
    }
}
控制台:
请输入一个数字串:
daf
请输入一个数字:
12
请输入:
31ad
daf
12
31ad



结果可以输出下一行语句

hasNext()

如果此扫描仪在其输入中有另一个令牌,则返回true。
使用hasNext()需要注意:

1. 输出为布尔值。
2. 判断输入的缓存中是否有效字符,遇到空格结束。
3. 如果只输入空格,不会匹配,返回false。

hasNextLine()

如果扫描仪的输入中有另一行,则返回true。
使用hasNextLine()需要注意:

1.以Enter为结束符,判断此行有没有输入,空白输入也会返回true。

next() 、 hasNextLine() 、hasNext() 、nextLine()的区别

next()是指针移动到当前下标,取出下一个输入
hasNext()是检测还有没有下一个输入
nextLine() 把指针移动到下一行 让然后取出当前这一行的输入
hasNextLine() 是检测下一行有没有输入

在使用过程中应该正确搭配:

hasNext() ——> next()
hasNextLine()——>nextLine()

        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()){
            System.out.println(scanner.next());
        }
控制台:
a b d
a
b
d

next对空格不匹配,当输入a b d时候,next只会读取a,缓存中剩下b d,在下一次循环时会继续上一个过程。所以循环了三次。

Scanner scanner=new Scanner(System.in);
        while(scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }
控制台:
a b d
a b d

nextLine会匹配空格,会继续向后输出。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值