先看解釋:
nextInt(): it only reads the int value, nextInt() places the cursor in the same line after reading the input.
next(): read the input only till the space. It can't read two words separated by space. Also, next() places the cursor in the same line after reading the input.
nextLine(): reads input including space between the words (that is, it reads till the end of line \n). Once the input is read, nextLine() positions the cursor in the next line.
看完之后nextInt()、next()和nextLine()的區別已經很清楚了,我覺得最容易出錯的就是cursor問題。
看下面代碼:
1 import java.util.Scanner; 2 3 public class MaxMap { 4 public static void main(String[] args){ 5 Scanner cin = new Scanner(System.in); 6 int n = cin.nextInt(); 7 String str = cin.nextLine(); 8 System.out.println("END"); 9 } 10 }
執行后結果:
從執行結果上看,貌似直接跳過了String str = cin.nextLine();這行代碼。
其實不然,原因是:nextInt()只讀取數值,剩下"\n"還沒有讀取,並將cursor放在本行中。nextLine()會讀取"\n",並結束(nextLine() reads till the end of line \n)。
如果想要在nextInt()后讀取一行,就得在nextInt()之后額外加上cin.nextLine(),代碼如下
import java.util.Scanner; public class MaxMap { public static void main(String[] args){ Scanner cin = new Scanner(System.in); int n = cin.nextInt(); cin.nextLine(); String str = cin.nextLine(); System.out.println("END"); } }
在看下面代碼:
1 import java.util.Scanner; 2 3 public class MaxMap { 4 public static void main(String[] args){ 5 Scanner cin = new Scanner(System.in); 6 String n = cin.next(); 7 //cin.nextLine(); 8 String str = cin.nextLine(); 9 System.out.println("END"); 10 System.out.println("next()read:"+n); 11 System.out.println("nextLine()read:"+str); 12 } 13 }
執行結果:
原因:next()只讀空格之前的數據,並且cursor指向本行,后面的nextLine()會繼續讀取前面留下的數據。
想要讀取整行,就是用nextLine()。
讀取數字也可以使用nextLine(),不過需要轉換:Integer.parseInt(cin.nextLine())。
注意在next()、nextInt()與nextLine()一起使用時,next()、nextInt()往往會讀取部分數據(會留下"\n"或者空格之后的數據)。