java 输入Scanner 的一些坑,都是用泪换来的。。。
先简单总结一下:
- scanner.next()获取字符串以空格,tab,回车 为结束符号,且不读取结束符,会自动去掉开始的空格,光标停留在本行。
- scanner.nextInt()/nextLong()/nextDouble 获取一个对应数据类型的数,以光标停留在本行
- scanner.nextLine() 读取一行数据,可以包含空格,以回车结束,不包含回车。
- next(),nextInt(),nextLong(),是不读取回车符的,所以,如果你在使用完1,2这几种读取后要接着输入一个换行,然后才能读取你想要的数据,不然会遇到回车直接截断,字符串为空,导致读取失败。实例见下面。
- 对于快捷输入(使用复制一次性的输入),要保证使用的是一个Scanner,因为一次性输入的时候所有的数据是缓存在第一个scanner里面,挨个去取。如果你重新定义一个scanner,则出现读取问题(最常见为数据类型不匹配)。
- scanner.next()
Scanner scanner = new Scanner(System.in); String s = scanner.next(); System.out.println(s + "---len--"+s.length());
以空格作为结束,只读取了第一个有效字符串,后面的将不再读取
- scanner.nextInt()/nextLong()/nextDouble
int a = scanner.nextInt(); System.out.println(a); Long b = scanner.nextLong(); System.out.println(b); Double c = scanner.nextDouble(); System.out.println(c);
以换行结束
以空格结束
int a = scanner.nextInt(); System.out.println(a); String s = scanner.nextLine(); System.out.println(s);
int a = scanner.nextInt(); System.out.println(a); scanner.nextLine(); String s = scanner.nextLine(); System.out.println(s);