nextLine()和next()的區別和使用方法


最近在筆試,刷劍指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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM