Java中的nextLine(), nextInt(),next()
最近在写Java代码中,遇到了一个问题,下面是部分代码
…
for (int i = 0; i < array1.length; i++) {
array1[i] = scanner.nextInt();
}
while(m > 0) {
String str = scanner.nextLine();//输入一个字符串,字符串第一个为想要的操作,后两个为操作的ID
String[] array2 = str.split(" "); //按空格进行分割
char ch = array2[0].charAt(0);//读取操作是U还是Q`
…
在代码的最后一行报错,说是越界。但是我要读取的是0,0应该不会越界的。百度查了一圈关于charAt()越界的问题,但是没有任何结果。然后,看到一个关于nextLine()解释的文章后,发现错误其实是在nextLine()那一行。
因为nextLine()前面有nextInt()在的时候,nextLine()读到的是nextInt()读完Int数值后剩下的“\n”。因此就好像直接跳过了 String str = scanner.nextLine();这一行。
所以,如果想要在nextInt()后读取一行,就需要在while之前加上一行scanner.nextLine();,这样,str就可以正常输入了。
next(),nextInt(),nextLine()
nextInt(): 它只读取int值,nextInt()在读取输入后将光标放在同一行。
next():只读取输入直到空格。它不能读由空格隔开的两个单词。同样,next()在读取输入后将光标放在同一行。
nextLine():读取输入,包括单词之间的空格(即读取到行\n的末尾)。读取输入后,nextLine()将光标定位在下一行。