在java中,我们通常采用一个非常方便的输入数据的类Scanner,位于java.util包中,这个Scanner的具体用法为:
java Scanner in = new Scanner(System.in);
我们在平时刷题时经常会遇到有关他的两个问题
-
Scanner对象通过一系列的in.nextXxx();方法来读取相应的基本类型的数据,通过in.hasNextXxx();方法来判断是否还有下一个数据。然而,Scanner读取数据是按空格符,这其中包括空格键,Tab键,Enter键。只要遇到其中之一,Scanner的方法就会返回下一个输入。
scanner.hasNext()、 scanner.Next(),截止至空格
scanner.hasNextLine(),scanner.NextLine()截止至换行符,不会在空格停止只有输入字符串组时,才使用nextline(),而且如果跟在next()后面使用的话,要使用两个。(第一个会读取空字符串) 输入数组时,不要使用nextline()了,不然转化会很麻烦。使用for+next逐一读取
-
当我们刷题超时的时候,我们可以使用更高效的BufferReader。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
我们便可以使用 read() 方法从控制台读取一个字符,或者用 readLine() 方法读取一个字符串。
然而,要使用BufferReader输入一些字符之外的类型的数据,就要相对比较麻烦,需要通过一些XXXX.parseXxx();来转换相应的数据类型,(int类型的用Integer.parseInt(需要转换的字符串))虽然,麻烦一些,但通过在一些OJ系统上的和Scanner作对比,BufferReader的效率要比Scanner高一倍,这个差距可想而知,读取的数据越多,效果就越明显。



