一文帶你掌握J(rèn)ava中Scanner類的使用
java.util.Scanner 是 Java5 的新特征,我們可以通過 Scanner 類來獲取用戶的輸入。下面是創(chuàng)建 Scanner 對象的基本語法:
Scanner s = new Scanner(System.in);
演示一個最簡單的數(shù)據(jù)輸入,并通過 Scanner 類的 next() 與 nextLine() 方法獲取輸入的字符串,在讀取前我們一般需要 使用 hasNext 與 hasNextLine 判斷是否還有輸入的數(shù)據(jù):
使用 next 方法:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// 從鍵盤接收數(shù)據(jù)
Scanner scan = new Scanner(System.in);
// next方式接收字符串
System.out.println("next方式接收:");
// 判斷是否還有輸入
if (scan.hasNext()) {
String str1 = scan.next();
System.out.println("輸入的數(shù)據(jù)為:" + str1);
}
scan.close();
}
}
// 執(zhí)行以上程序輸出結(jié)果為:
// next方式接收:
// juejin cn
// 輸入的數(shù)據(jù)為:juejin
// Process finished with exit code 0
可以看到 cn 字符串并未輸出,接下來我們看 nextLine。
使用 nextLine 方法:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// 從鍵盤接收數(shù)據(jù)
Scanner scan = new Scanner(System.in);
// nextLine方式接收字符串
System.out.println("nextLine方式接收:");
// 判斷是否還有輸入
if (scan.hasNextLine()) {
String str2 = scan.nextLine();
System.out.println("輸入的數(shù)據(jù)為:" + str2);
}
scan.close();
}
}
// 執(zhí)行以上程序輸出結(jié)果為:
// nextLine方式接收:
// juejin cn
// 輸入的數(shù)據(jù)為:juejin cn
// Process finished with exit code 0
nextLine 方法可以看到 cn 字符串輸出。
next() 與 nextLine() 區(qū)別:
next():
- 1、一定要讀取到有效字符后才可以結(jié)束輸入。
- 2、對輸入有效字符之前遇到的空白,next() 方法會自動將其去掉。
- 3、只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結(jié)束符。
- next() 不能得到帶有空格的字符串。
nextLine():
- 1、以Enter為結(jié)束符,也就是說 nextLine()方法返回的是輸入回車之前的所有字符。
- 2、可以獲得空白。
如果要輸入 int 或 float 類型的數(shù)據(jù),在 Scanner 類中也有支持,但是在輸入之前最好先使用 hasNextXxx() 方法進(jìn)行驗(yàn)證,再使用 nextXxx() 來讀?。?/p>
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// 從鍵盤接收數(shù)據(jù)
Scanner scan = new Scanner(System.in);
int i = 0;
float f = 0.0f;
System.out.print("輸入整數(shù):");
if (scan.hasNextInt()) {
// 判斷輸入的是否是整數(shù)
i = scan.nextInt();
// 接收整數(shù)
System.out.println("整數(shù)數(shù)據(jù):" + i);
} else {
// 輸入錯誤的信息
System.out.println("輸入的不是整數(shù)!");
}
System.out.print("輸入小數(shù):");
if (scan.hasNextFloat()) {
// 判斷輸入的是否是小數(shù)
f = scan.nextFloat();
// 接收小數(shù)
System.out.println("小數(shù)數(shù)據(jù):" + f);
} else {
// 輸入錯誤的信息
System.out.println("輸入的不是小數(shù)!");
}
System.out.println("關(guān)閉輸入");
scan.close();
}
}
// 執(zhí)行以上程序輸出結(jié)果為:
// 輸入整數(shù):12
// 整數(shù)數(shù)據(jù):12
// 輸入小數(shù):1.2
// 小數(shù)數(shù)據(jù):1.2
// 關(guān)閉輸入
// Process finished with exit code 0
以下實(shí)例我們可以輸入多個數(shù)字,并求其總和與平均數(shù),每輸入一個數(shù)字用回車確認(rèn),通過輸入非數(shù)字來結(jié)束輸入并輸出執(zhí)行結(jié)果:
import java.util.Scanner;
class RunoobTest {
public static void main(String[] args) {
System.out.println("請輸入數(shù)字:");
Scanner scan = new Scanner(System.in);
double sum = 0;
int m = 0;
while (scan.hasNextDouble()) {
double x = scan.nextDouble();
m = m + 1;
sum = sum + x;
}
System.out.println(m + "個數(shù)的和為" + sum);
System.out.println(m + "個數(shù)的平均值是" + (sum / m));
scan.close();
}
}
// 執(zhí)行以上程序輸出結(jié)果為(輸入非數(shù)字來結(jié)束輸入):
// 請輸入數(shù)字:
// 12
// 23
// 15
// 21.4
// end
// 4個數(shù)的和為71.4
// 4個數(shù)的平均值是17.85
Scanner 不僅能從輸入流中讀取,也能從文件中讀?。?/p>

public class Test {
public static void main(String args[]) throws IOException {
int[] arr = new int[10];
int i = 0;
// 創(chuàng)建 File 對象
File file = new File("/Users/wanggang/Desktop/JavaTest/Hello.txt");
// 創(chuàng)建 Scanner 對象
Scanner sc = new Scanner(file);
// 判斷是否還有輸入
while (sc.hasNextLine()){
// 將輸入接收,否則會阻塞
sc.nextLine();
//判斷輸入的是否是整數(shù)
while(sc.hasNextInt()) {
// 將整數(shù)存入數(shù)組
arr[i] = sc.nextInt();
I++;
}
}
// 關(guān)閉 Scanner
sc.close();
// 輸出讀取的整數(shù)個數(shù)
System.out.printf("讀取了 %d 個數(shù)\n",i);
// 輸出所有讀取的整數(shù)
for(int j = 0; j < i; j++) {
System.out.print(arr[j] + ",");
}
}
}
// 執(zhí)行以上程序輸出結(jié)果為:
// 讀取了 5 個數(shù)
// 1,2,3,4,5,到此這篇關(guān)于一文帶你掌握J(rèn)ava中Scanner類的使用的文章就介紹到這了,更多相關(guān)Java Scanner類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java二叉樹的遍歷思想及核心代碼實(shí)現(xiàn)
今天小編就為大家分享一篇關(guān)于Java二叉樹的遍歷思想及核心代碼實(shí)現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
java編程經(jīng)典案例之基于斐波那契數(shù)列解決兔子問題實(shí)例
這篇文章主要介紹了java編程經(jīng)典案例之基于斐波那契數(shù)列解決兔子問題,結(jié)合完整實(shí)例形式分析了斐波那契數(shù)列的原理及java解決兔子問題的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Spring使用AspectJ的注解式實(shí)現(xiàn)AOP面向切面編程
這篇文章主要介紹了Spring使用AspectJ的注解式實(shí)現(xiàn)AOP面向切面編程的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
基于Spring-AOP實(shí)現(xiàn)自定義分片工具詳解
隨著數(shù)據(jù)量的增長,在與其他系統(tǒng)交互時,批量接口會出現(xiàn)超時現(xiàn)象,發(fā)現(xiàn)原批量接口在實(shí)現(xiàn)時,沒有做分片處理。由于與其他系統(tǒng)交互比較多,一個一個接口去做分片優(yōu)化,改動量較大,所以考慮通過AOP解決此問題,感興趣的可以了解一下2022-11-11
簡單快速對@RequestParam聲明的參數(shù)作校驗(yàn)操作
這篇文章主要介紹了簡單快速對@RequestParam聲明的參數(shù)作校驗(yàn)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08

