sc.next() 和 sc.nextLine 的區別
阿新 • • 發佈:2018-12-22
*兩個都是用來接收使用者的輸入,區別在於:
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 */