Java中Scanner文本扫描器的hasNext()与next()的区别!

最近在刷牛客的笔试真题,发现居然要自己手写输入输出,于是我就慌了啊!兄弟们,找几个题看看,发现问题不大,反手就来一个记录!希望对即将参加春招、实习和秋招的Java初学者有所帮助,一起加油干吧!打工人!

话不多说,直接上干活!

1、如何引入Scanner?

这里我们从官方的Java学习api中看到这么一段话:一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 A
Scanner分隔符模式将输入打破到令牌,默认情况下匹配空格。 然后可以使用各种next方法将得到的令牌转换成不同类型的值。

(1)例如,该代码允许用户从System.in读取一个数字:

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

(2) 另一个例子,该代码允许从文件myNumbers中的条目分配long类型:

      Scanner sc = new Scanner(new File("myNumbers"));
      while (sc.hasNextLong()) {
          long aLong = sc.nextLong();
      }

(3) 扫描仪也可以使用除空格之外的分隔符。 此示例从字符串读取几个项目:

     String input = "1 fish 2 fish red fish blue fish";
     Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
     System.out.println(s.nextInt());
     System.out.println(s.nextInt());
     System.out.println(s.next());
     System.out.println(s.next());
     s.close();

打印以下输出:

 1
 2
 red
 blue

(4) 可以使用此代码生成相同的输出,该代码使用正则表达式一次解析所有四个令牌:

     String input = "1 fish 2 fish red fish blue fish";
     Scanner s = new Scanner(input);
     s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
     MatchResult result = s.match();
     for (int i=1; i<=result.groupCount(); i++)
         System.out.println(result.group(i));
     s.close();

该default whitespace delimiter由扫描仪使用的是由认可Character 。 isWhitespace 。 reset()方法将将扫描仪分隔符的值重置为默认空白分隔符,而不管以前是否已更改。

这里面用的最多的就是第一种方式,所以着重看一下第一种形式!

2、如何读取输入文本?

这里读取输入文本使用的是hasNext()方法。

Scanner sc = new Scanner(System.in);
while(sc.hesNext()){//这里是循环输入,直到输入为空或者无输入
}

在这里插入图片描述

3、hasNext()与next()的区别究竟是什么呢?

hasNext()与next()的区别

  1. 两者均根据空格划分数据
  2. 两者在没有数据输入时均会等待输入
  3. next()方法会将空格划分的数据依次输出,运行一次,输出一个
  4. hasNext()方法会跟着next()方法移动,当前数据不为空,则返回true
  5. hasNext()返回的是boolean类型而next()返回的是你输入的那个值

案例:

import java.util.*;
public class Main {
        public static void main(String []args){
            Scanner sc = new Scanner(System.in);
            while(sc.hasNext()){//还在输入就是为true
                int n = sc.nextInt();//获取输入行数
                String []result = new String[n];
                for(int i=0;i<n;i++){
                    String str = sc.next();//获取当前输入
                    result[i] = str;
                }
                Arrays.sort(result);
                for(int i=0;i<result.length;i++){
                    System.out.println(result[i]);
                }
            }
            sc.close();
        }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值