前言

java.util.Scanner在OJ中是很重要的存在。特地过来学习学习。

用法示例1

public class Main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);//生成Scanner对象
        while (sc.hasNextInt()) {
            int a = sc.nextInt(); //读下一个整型字符串
            int b = sc.nextInt();
            System.out.println(a + b);
        }
    }
}

输入输出:
第一组

4 7 3 4
打印结果是:
11
7

第二组

4

7
11 //在输入4,回车,7之后会直接打印11
5
6
11 //同样,这里直接打印出11

可以看到,无论是空格还是回车,都可以分割开,并且读到对应整型数据。只不过第二组在每读到两个数据,就进行了运算。这也说明Scanner在处理字符串对象的时候,以空格或者回车换行符作为分隔都是可以的。

用法示例2

  • hasNext() 是检测 还有没有下一个输入,遇到回车才停止判断。
  • next()是指针移动到当前下标,并取出下一个输入
public class Solution {
    public static void main(String[] args)
    {
        System.out.println("请输入若干单词,以空格作为分隔");
        Scanner sc = new Scanner(System.in);
        while(!sc.hasNext("#"))  //匹配#返回true
        {
            System.out.println("键盘输入的内容是:"+ sc.next());
        }
        System.out.println("会执行的");
    }

}

测试1

请输入若干单词,以空格作为分隔
abc def#
键盘输入的内容是:abc
键盘输入的内容是:def#

测试2

请输入若干单词,以空格作为分隔
123 efe dg #
键盘输入的内容是:123
键盘输入的内容是:efe
键盘输入的内容是:dg
会执行的

可以看到,#在第一次测试中被读取到了。

用法示例3

public class Main1 {


    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        while(sc.hasNext()){
            String [] s=sc.next().split(" ");
            int sum=0;
            for(int i=0;i<s.length;i++){
                sum=sum+Integer.parseInt(s[i]);
            }
            System.out.println(sum);
        }
    }
}

输出结果

4 5 6
4
5
6

用法示例4

用法示例3和4的区别

  •  next()不会读取字符前/后的空格/Tab键,只吸取字符,直到遇到空格/Tab键/回车截止读取
  •  nextLine()读取字符前后的空格/Tab键,回车键截止。这是因为这一行都要读,所以只要你不换行,就会读进来

下面代码将读取一行,并将这一行用空格分割开。

public class Solution {
        public static void main(String[] args){
            Scanner sc=new Scanner(System.in);

            while(sc.hasNextLine()){
                String [] s=sc.nextLine().split(" ");
                int sum=0;
                for(int i=0;i<s.length;i++){
                    sum=sum+Integer.parseInt(s[i]);
                }
                System.out.println(sum);
            }
        }
}

运行结果

7 8 9
24  (输出24)

总结

  • 上面简单学习了hasNextIntnextInthasNextLinenextLine、以及hasNextnext。请尽量两两搭配使用。希望在笔试面试的时候能发挥作用。