用Java在在线oj平台上做题时,要求的标准输入一般是“Scanner cin=new Scanner(System.in);”。
其实还有更有效率的方法:Scanner cin=new Scanner(new BufferedInputStream(System.in))。笔者更常用这种方法,效率更高。但是由于本文主题不在于此,因此不再赘述。
回到正题,之前就发现nextXXX()(包括next()方法)后面紧跟nextLine()的话,后者不会读取到数据,输出的话为空字符串。这两天做了几个题,又涉及到这个问题了。既然开博了,就把这个问题分析、总结,记录下来,以后忘了的话翻翻博客就记起来了。
写了一段代码,测试所有的cin.nextXXX()方法。
代码如下:
1 import java.math.BigDecimal; 2 import java.math.BigInteger; 3 import java.util.Scanner; 4 5 /** 6 * 测试:1.所有的nextXXX()方法(包括next()),后面直接跟nextLine()读取数据; 7 * 2.先加一句nextLine(),再用nextLine()读取数据,两者的区别。 8 * 将每个代码块中间的注释"//cin.nextLine()",去掉"//",即可实现第2种方法。 9 * @author Hubert 10 * 11 */ 12 public class ScannerTest { 13 14 public static void main(String[] args) { 15 // TODO Auto-generated method stub 16 Scanner cin=new Scanner(System.in); 17 18 //测试cin.next() 19 System.out.println("测试 cin.next()后面紧跟着nextLine()读取数据:"); 20 System.out.println("请输入一个字符串:"); 21 String next=cin.next(); 22 //cin.nextLine(); 23 System.out.println("请输入一个字符串:"); 24 String nextLine1=cin.nextLine(); 25 System.out.println("next()方法读取的值为:"+next); 26 System.out.println("nextLine()方法读取的值为:"+nextLine1+"\n"); 27 28 //测试cin.nextInt() 29 System.out.println("测试cin.nextInt()后面紧跟着nextLine()读取数据:"); 30 System.out.println("请输入一个整数:"); 31 int nextInt=cin.nextInt(); 32 //cin.nextLine(); 33 System.out.println("请输入一个字符串:"); 34 String nextLine2=cin.nextLine(); 35 System.out.println("nextInt()方法读取的值为:"+nextInt); 36 System.out.println("nextLine()方法读取的值为:"+nextLine2+"\n"); 37 38 //测试cin.nextDouble() 39 System.out.println("测试cin.nextDouble()后面紧跟着nextLine()读取数据:"); 40 System.out.println("请输入一个小数:"); 41 double nextDouble=cin.nextDouble(); 42 //cin.nextLine(); 43 System.out.println("请输入一个字符串:"); 44 String nextLine3=cin.nextLine(); 45 System.out.println("nextDouble()方法读取的值为:"+nextDouble); 46 System.out.println("nextLine()方法读取的值为:"+nextLine3+"\n"); 47 48 //测试cin.nextFloat() 49 System.out.println("测试cin.nextFloat()后面紧跟着nextLine()读取数据:"); 50 System.out.println("请输入一个小数:"); 51 float nextFloat=cin.nextFloat(); 52 //cin.nextLine(); 53 System.out.println("请输入一个字符串:"); 54 String nextLine4=cin.nextLine(); 55 System.out.println("nextFloat()方法读取的值为:"+nextFloat); 56 System.out.println("nextLine()方法读取的值为:"+nextLine4+"\n"); 57 58 //测试cin.nextBoolean() 59 System.out.println("测试cin.nextBoolean()后面紧跟着nextLine()读取数据:"); 60 System.out.println("请输入一个布尔值(true或者false):"); 61 boolean nextBoolean=cin.nextBoolean(); 62 //cin.nextLine(); 63 System.out.println("请输入一个字符串:"); 64 String nextLine5=cin.nextLine(); 65 System.out.println("nextBoolean()方法读取的值为:"+nextBoolean); 66 System.out.println("nextLine()方法读取的值为:"+nextLine5+"\n"); 67 68 //测试cin.nextLong() 69 System.out.println("测试cin.nextLong()后面紧跟着nextLine()读取数据:"); 70 System.out.println("请输入一个整数:"); 71 long nextLong=cin.nextLong(); 72 //cin.nextLine(); 73 System.out.println("请输入一个字符串:"); 74 String nextLine6=cin.nextLine(); 75 System.out.println("nextLong()方法读取的值为:"+nextLong); 76 System.out.println("nextLine()方法读取的值为:"+nextLine6+"\n"); 77 78 //测试cin.nextByte() 79 System.out.println("测试cin.nextByte()后面紧跟着nextLine()读取数据:"); 80 System.out.println("请输入一个整数(-128~127):"); 81 byte nextByte=cin.nextByte(); 82 //cin.nextLine(); 83 System.out.println("请输入一个字符串:"); 84 String nextLine7=cin.nextLine(); 85 System.out.println("nextByte()方法读取的值为:"+nextByte); 86 System.out.println("nextLine()方法读取的值为:"+nextLine7+"\n"); 87 88 //测试cin.nextShort() 89 System.out.println("测试cin.nextShort()后面紧跟着nextLine()读取数据:"); 90 System.out.println("请输入一个整数:"); 91 short nextShort=cin.nextShort(); 92 //cin.nextLine(); 93 System.out.println("请输入一个字符串:"); 94 String nextLine8=cin.nextLine(); 95 System.out.println("nextShort()方法读取的值为:"+nextShort); 96 System.out.println("nextLine()方法读取的值为:"+nextLine8+"\n"); 97 98 //测试cin.nextBigInteger() 99 System.out.println("测试cin.nextBigInteger()后面紧跟着nextLine()读取数据:"); 100 System.out.println("请输入一个整数:"); 101 BigInteger nextBigInteger=cin.nextBigInteger();//扫描下一个输入作为BigInteger(可以实现任意大的大数) 102 //cin.nextLine(); 103 System.out.println("请输入一个字符串:"); 104 String nextLine9=cin.nextLine(); 105 System.out.println("nextBigInteger()方法读取的值为::"+nextBigInteger); 106 System.out.println("nextLine()方法读取的值为:"+nextLine9+"\n"); 107 108 //测试cin.nextBigDecimal() 109 System.out.println("测试cin.nextBigDecimal()后面紧跟着nextLine()读取数据:"); 110 System.out.println("请输入一个小数:"); 111 BigDecimal nextBigDecimal=cin.nextBigDecimal();//扫描下一个输入作为BigDecimal(可以实现任意精度) 112 //cin.nextLine(); 113 System.out.println("请输入一个字符串:"); 114 String nextLine10=cin.nextLine(); 115 System.out.println("nextBigDecimal()方法读取的值为:"+nextBigDecimal); 116 System.out.println("nextLine()方法读取的值为:"+nextLine10+"\n"); 117 118 cin.close(); 119 } 120 }