java的Scanner类总结
java中的从键盘输入主要是依赖于Scanner类,下面将介绍Scanner类的一些比较常见并且重要的方法。
1.nextInt()/nextFloat()/nextDouble().....
这种只会读取一个数值,并且不会读取最后的换行符'\n'
2.String nextLine()
扫描的是一行数据,并且当作字符串来处理,不会读取最后的换行符'\n'
3.String next()
遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。
测试:
public static void main(String []args){ Scanner scanner=new Scanner(System.in); //从键盘获取标准输入 System.out.println("请输入你的座右铭:"); String pro=scanner.nextLine(); System.out.println("请输入你的名字"); String name=scanner.next(); System.out.println("请输入你的年纪"); int age=scanner.nextInt(); System.out.println("座右铭:"+pro); System.out.println("名字:"+name); System.out.println("年纪:"+age); }
存在BUG的地方:
实验发现,如果在nextLine(),之前有其他的输入的话(不包含nextLine(),也就是说2个nextLine()不会出现这个问题),nextLine()会无法输入,原因是:nextLine()会读取之前输入的回车'\n',也就是说是读取了,但是读取了上一个输入的回车,所以解决方法就是:加多一个nextLine()来读取上一次的回车即可;有点类似c++的getchar()来读取上一个的回车。
public static void main(String []args){ Scanner scanner=new Scanner(System.in); //从键盘获取标准输入 System.out.println("请输入你的名字"); String name=scanner.next(); System.out.println("请输入你的座右铭:"); String pro=scanner.nextLine(); System.out.println("请输入你的年纪"); int age=scanner.nextInt(); System.out.println("座右铭:"+pro); System.out.println("名字:"+name); System.out.println("年纪:"+age); }
从结果中可以看到,我们无法输入座右铭,因为它已经读取了上一个的回车,相当于输入完成了。
解决方法:加多一个nextLine()
public static void main(String []args){ Scanner scanner=new Scanner(System.in); //从键盘获取标准输入 System.out.println("请输入你的名字"); String name=scanner.next(); scanner.nextLine(); System.out.println("请输入你的座右铭:"); String pro=scanner.nextLine(); System.out.println("请输入你的年纪"); int age=scanner.nextInt(); System.out.println("座右铭:"+pro); System.out.println("名字:"+name); System.out.println("年纪:"+age); }
循环输入多组测试用例
public static void main(String []args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { int n = input.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = input.nextInt(); } String[] b = new String[n]; for (int i = 0; i < n; i++) { b[i] = input.next(); } System.out.println(Arrays.toString(a) + " " + Arrays.toString(b)); } }