前言
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)
总结
- 上面简单学习了
hasNextInt
和nextInt
、hasNextLine
和nextLine
、以及hasNext
和next
。请尽量两两搭配使用。希望在笔试面试的时候能发挥作用。