1. 程式人生 > >sc.next() 和 sc.nextLine 的區別

sc.next() 和 sc.nextLine 的區別

*兩個都是用來接收使用者的輸入,區別在於: 
next()從遇到第一個有效字元(非空格、換行符)開始掃描,遇到第一個分隔符或結束符(空格’ ‘或者換行符 ‘\n’)時結束。 nextLine()則是掃描剩下的所有字串知道遇到回車為止。**

聰明的你get到了嗎? 
如果沒有,沒關係,我們來舉個例子,對於如下輸入:

Scanner sc = new Scanner(System.in);
//加入輸入的是:aaa bbb ccc
str1=sc.next();
//str1="aaa"
str2=sc.nextline();
//str2=" bbb ccc"

解釋一下原因 
首先對於輸入的資料,在計算機中實際表示是這樣的,包含三個空格和一個換行符: 
aaa bbb ccc \n 
netx()函式從遇到的第一個有效的字元a開始掃描,直到遇到第一個空格掃描結束,得到字串”aaa” 
nextLine()函式從空格開始掃描知直到遇到\n符結束,故得到字串是 ” bbb ccc”,注意這裡bbb前面還有一個空格 
所以如果要同時使用next和nextLine()時,要慎用,因為聯合使用時就是一個整體,next在前,nextLine靠後,掃描接受的是同一行上的字串,只不過接收的是不同內容罷了。

下面對於sc.nextInt() ,sc.nextDouble等與sc.nextLine()使用時需要注意的問題

/*
如果要求一次接受一個整數、浮點數和字串?你會怎麼做??
42
3.1415
Welcome to HackerRank Java tutorials!
*/
 
import java.util.Scanner;
 
public class Solution {
 
    public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            int x=sc.nextInt();
            double y=sc.nextDouble();
            sc.nextLine();  /*to flush the character \n left by method nextDouble()*/
            String s= sc.nextLine();
            System.out.println("String: "+s);
            System.out.println("Double: "+y);
            System.out.println("Int: "+x);
 
    }
}
/*
使用者的輸入在計算機緩衝區中是這樣儲存的:42\n3.1415\nWelcome to HackerRank Java tutorials!\n
使用nextInt()讀取42結束,剩下\n3.1415\nWelcome to HackerRank Java 
使用nextDouble()讀取3.1415,剩下\nWelcome to HackerRank Java 
如果此時直接用nextLine()讀取,該函式遇到換行符\n就結束
所以需要在這之前輸入nextLine(),去掉緩衝區的\n,然後再讀取
這是由於nextLine()會讀取\n之前的所有內容,並去除\n,而nextDouble()等曾不會去除它後面的\n
*/