最近在筆試,刷劍指Offer時,都是只需要把方法實現了就行。但是!!!筆試時候會發現,大部分會要求你把main函數也code出來,真是醉了,第一次筆試時候搞的暈乎乎的.....
廢話不多說,那么在寫輸入輸出中,肯定要用到Scanner類了,其中不少都需要讀取一個整數或者一個整型數組。當讀入整數時(以int為例),直接就nextInt()就好,可是當讀入一個整型數組時(數字之間用空格隔開),就涉及到用nextLine()和next()了。看了一下網上的分析,都很到位嗎,在這里我在總結一下希望給大家提供一些思考,於此同時也給自己加深一下記憶!
next()
next()一定要讀取到有效字符后才可以結束輸入,對輸入有效字符之前遇到的空格鍵、Tab鍵或Enter鍵等結束符,next()方法會自動將其去掉,只有在輸入有效字符之后,next()方法才將其后輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結束符。比如,在控制台輸入“ gjm gjm ”時,一次next()讀入進來的僅僅是"gjm"。它不能得到帶空格的字符串的!
nextLine()
nextLine()方法的結束符只是Enter鍵,即nextLine()方法返回的是Enter鍵之前的所有字符。比如,在控制台輸入“ gjm gjm ”時,一次nextLine()讀入進來的結果是" gjm gjm "。它是可以得到帶空格的字符串的!
網上有個小例子,我看着挺好,如下:
1 import java.util.Scanner; 2 3 public class NextTest { 4 public static void main(String[] args) { 5 test1(); 6 //test2(); 7 } 8 9 public static void test1() { 10 String s1,s2; 11 Scanner sc=new Scanner(System.in); 12 System.out.print("請輸入第一個字符串:"); 13 s1=sc.nextLine(); 14 System.out.print("請輸入第二個字符串:"); 15 s2=sc.next(); 16 System.out.println("輸入的字符串是:"+s1+" "+s2); 17 } 18 public static void test2() { 19 String s1,s2; 20 Scanner sc=new Scanner(System.in); 21 System.out.print("請輸入第一個字符串:"); 22 s1=sc.next(); 23 System.out.print("請輸入第二個字符串:"); 24 s2=sc.nextLine(); 25 //s2=sc.nextLine(); 26 System.out.println("輸入的字符串是:"+s1+" "+s2); 27 } 28 }
結果:
- 當運行test1();時,結果如下示:
- 當運行test2();時,結果如下示:
即在我剛輸入完home后,按下回車,直接彈出結果,程序執行完畢【內心呼嘯,tmd我第二個字符串還沒輸入呢就給勞資返回結果了】。
通過分析發現:是next()讀不到回車的,而是將回車作為分隔符,並且留給了nextLine(),nextLine()毫不客氣,直接讀入,然后結束。
故想要輸出和test1()一樣的結果,需要將test2()中nextLine()后再加一個nextLine(),第一個用來讀next()留下的回車分隔符,第二個用來讀work。故如上所示,將第25行程序加入,然后執行,就會發現結果和test1()一樣。
Over...
參考:
1. https://blog.csdn.net/Zhiyuan_Ma/article/details/51592730