Scanner对象的输入结束标记问题

最近开始复习java了,自己不知道或者需要注意的地方自己做个笔记

package gt;

import java.util.Scanner;

/**
 * Created by Cronous on 2017/10/29.
 */
public class day01 {

    public static void main(String[] args){
        System.out.print("请输入值:");
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
            System.out.println(s.next());
        }
    }
}

我们输入 ”123 345 678“ 然后回车,发现控制台打印 

123

345

678

我看了下scanner的api它是这么说的 :

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。

然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

所以这里我们知道它默认是以空白匹配,所以我们输入当中有空格,它会一次读取,直到回车,但是你会发现我们最后一个数字后面并没有空格,系统也将数据分割出来了,

可能到这里不知道我在说啥,看下个例子:

package gt;

import java.util.Scanner;

/**
 * Created by Cronous on 2017/10/29.
 */
public class day01 {

    public static void main(String[] args){
        System.out.print("请输入值:");
        Scanner s = new Scanner(System.in);
        s.useDelimiter(" ");//这里我们将系统分隔符主动设置为 " "
        while(s.hasNext()){
            System.out.println(s.next());
        }
    }
}

在这里我们主动设置了一个分隔符 " " 然后上次一样输入数据,输入完按回车键 控制台效果如下:

123

345

这里我们会发现第三个数并没有输出,这是为什么? 我们发现我们输入完最后一个数时直接按回车了并没有输入我们设定的分隔符 " "

所以第三个数并没有被打印出来,我们这样输入 ”123 345 678 “再按回车就可以正常输出三个值,保证最后还有一个空格即可


再看一个代码(注意这里有个坑),我的需求是 获取输入值 ,当输入值为 "quit"时我们结束输入

package gt;

import java.util.Scanner;

/**
 * Created by Cronous on 2017/10/29.
 */
public class day01 {

    public static void main(String[] args){
        System.out.print("请输入值:");
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
           if("quit".equals(s.next())){
               break;
           }else{
               System.out.println(s.next());
           }
        }
    }
}
这里我们输入 ”123 345 quit“  回车确认,这里我们希望得到输出为

123

345

可是我们的得到的输出为

345

为什么只有”345“输出?  这里我通过debug发现一个问题:因为当我们判断是否等于 ”quit“值时我们调用 s.next() 已经获取”123“了,后来打印的是再一次获取的值,也就是获取的下一个值 "345"了,所以最后出现了 只打印 ”345“的问题

下面给出正确代码,我们只需要保证s.next()值统一就行

package gt;

import java.util.Scanner;

/**
 * Created by Cronous on 2017/10/29.
 */
public class day01 {

    public static void main(String[] args){
        System.out.print("请输入值:");
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
           String a = s.next();//将s.next()赋值给变量a
           if("quit".equals(a)){
               break;
           }else{
               System.out.println(a);
           }
        }
    }
}

这样即可解决,问题不大,但是需要注意一下。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值