Scanner對象的輸入結束標記
最近開始復習java了,自己不知道或者需要注意的地方自己做個筆記
package gt;?
import java.util.Scanner;?
/**
?* Created by Cronous on 2017/10/29.
?*/
public class day01 {
?
? ? public static void main(String[] args){
? ? ? ? System.out.print("請輸入值:");
? ? ? ? Scanner s = new Scanner(System.in);
? ? ? ? while(s.hasNext()){
? ? ? ? ? ? System.out.println(s.next());
? ? ? ? }
? ? }
}
我們輸入 ”123 345 678“ 然后回車,發現控制臺打印
123
345
678
我看了下scanner的api它是這么說的 :
Scanner 使用分隔符模式將其輸入分解為標記,默認情況下該分隔符模式與空白匹配。
然后可以使用不同的 next 方法將得到的標記轉換為不同類型的值。
所以這里我們知道它默認是以空白匹配,所以我們輸入當中有空格,它會一次讀取,直到回車,但是你會發現我們最后一個數字后面并沒有空格,系統也將數據分割出來了,
可能到這里不知道我在說啥,看下個例子:
package gt;?
import java.util.Scanner;?
/**
?* Created by Cronous on 2017/10/29.
?*/
public class day01 {
?
? ? public static void main(String[] args){
? ? ? ? System.out.print("請輸入值:");
? ? ? ? Scanner s = new Scanner(System.in);
? ? ? ? s.useDelimiter(" ");//這里我們將系統分隔符主動設置為 " "
? ? ? ? while(s.hasNext()){
? ? ? ? ? ? System.out.println(s.next());
? ? ? ? }
? ? }
}
在這里我們主動設置了一個分隔符 " " 然后上次一樣輸入數據,輸入完按回車鍵 控制臺效果如下:
123
345
這里我們會發現第三個數并沒有輸出,這是為什么? 我們發現我們輸入完最后一個數時直接按回車了并沒有輸入我們設定的分隔符 " "
所以第三個數并沒有被打印出來,我們這樣輸入 ”123 345 678 “再按回車就可以正常輸出三個值,保證最后還有一個空格即可
再看一個代碼(注意這里有個坑),我的需求是 獲取輸入值 ,當輸入值為 "quit"時我們結束輸入
package gt;?
import java.util.Scanner;?
/**
?* Created by Cronous on 2017/10/29.
?*/
public class day01 {
?
? ? public static void main(String[] args){
? ? ? ? System.out.print("請輸入值:");
? ? ? ? Scanner s = new Scanner(System.in);
? ? ? ? while(s.hasNext()){
? ? ? ? ? ?if("quit".equals(s.next())){
? ? ? ? ? ? ? ?break;
? ? ? ? ? ?}else{
? ? ? ? ? ? ? ?System.out.println(s.next());
? ? ? ? ? ?}
? ? ? ? }
? ? }
}
這里我們輸入 ”123 345 quit“ 回車確認,這里我們希望得到輸出為
123
345
可是我們的得到的輸出為
345
為什么只有”345“輸出? 這里我通過debug發現一個問題:因為當我們判斷是否等于 ”quit“值時我們調用 s.next() 已經獲取”123“了,后來打印的是再一次獲取的值,也就是獲取的下一個值 "345"了,所以最后出現了 只打印 ”345“的問題
下面給出正確代碼,我們只需要保證s.next()值統一就行
package gt;?
import java.util.Scanner;?
/**
?* Created by Cronous on 2017/10/29.
?*/
public class day01 {
?
? ? public static void main(String[] args){
? ? ? ? System.out.print("請輸入值:");
? ? ? ? Scanner s = new Scanner(System.in);
? ? ? ? while(s.hasNext()){
? ? ? ? ? ?String a = s.next();//將s.next()賦值給變量a
? ? ? ? ? ?if("quit".equals(a)){
? ? ? ? ? ? ? ?break;
? ? ? ? ? ?}else{
? ? ? ? ? ? ? ?System.out.println(a);
? ? ? ? ? ?}
? ? ? ? }
? ? }
}
這樣即可解決,問題不大,但是需要注意一下。
Scanner的輸入及理解
Scanner
- new 新生的意思
- System.out輸出
- System.in 輸入
Scannery對象
基本語法:
Scanner s = new Scanner(System.in);
通過Scanner類的next(下一個)與nextline(下一行)方法獲取輸入的字符串,在讀取前我們一般需要使用hasNext()與hasNextline()判斷是否還有輸入的數據。
package Scnner;
import java.util.Scanner;
public class Day01 {
public static void main(String[] args) {
//創建一個掃描對象,用于接收鍵盤數據
Scanner scanner = new Scanner(System.in);
//接收用戶的輸入,并把它封裝scanner
System.out.println("使用next方式接收:");
//判斷用戶有沒有輸出字符串
if (scanner.hasNext()==true) {
//這里默認==true,不用謝也可以,但是還是建議寫
String str = scanner.next();
//使用next方式接收
System.out.println("輸出的內容為:"+str);
}
}
}
next()
一定要讀取到有效字符后才可以結束輸入。
對輸入有效字符之前遇到的空白,next()方法會自動將其去掉。
只有輸入有效字符后才將其后面輸入的空白作為分隔符或者借宿符。
next()不能得到帶有空格的字符串
nextLine()
以enter為結束符,也就是說nextLine()方法返回的輸入回車之前的所有字符。
可以獲得空白
package Scnner;
import java.util.Scanner;
public class Day02 {
public static void main(String[] args) {
//從鍵盤來接收數據
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//判斷是否還有輸入
if (scanner.hasNextLine()){
//等待用戶去輸入
String str = scanner.nextLine();
System.out.println("輸出的內容:"+str);
}
scanner.close();
}
}
當然也可以不要if去判斷
if (scanner.hasNextLine())
package Scnner;
import java.util.Scanner;
public class Day03 {
?? ?public static void main(String[] args) {
?? ?Scanner scanner = new Scanner(System.in);?? ?
?? ??? ?System.out.println("請輸入數據:");
?? ??? ?String str = scanner.nextLine();
?? ??? ?System.out.println("輸出的內容:"+str);?? ?? ?
?? ??? ?scanner.close();? ?? ?
?? ?}
這樣也是可以的
Scanner輸入內容理解(重點)
我個人是這樣理解的
輸入輸出我們只要記住3行代碼就行
System.out.println("請輸入數據:");
?? ??? ?String str = scanner.nextLine();
?? ??? ?System.out.println("輸出的內容:"+str);
第一行代碼是標題
請輸入數據:
第二行代碼: 是我們鍵盤所輸出的所有內容,知道你按下回車鍵(enter)之后,把所有內容變成一個變量保存再str里面
第三行代碼:則是等待第二行代碼運行完成后,將輸出內容+str(你鍵盤敲下的所有字符,也就是內容) 一起顯示出來
如下圖
第一行為第一行代碼
第二行hello world 為第二行代碼,也就是你鍵盤敲下的內容
第三行則是等待第二行代碼運行完成后,輸出的內衣+鍵盤敲下的所有字符一起顯示出來
注意
//凡是IO流的類如果不關閉會一直占用資源,要養成好習慣用完就關掉
?? ??? ?scanner.close();
?? ??? ?//IO流 輸入輸出流
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持html5模板網。