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

public class Test {
public static void main(String args[]) throws IOException {
int[] arr = new int[10];
int i = 0;
// 創(chuàng)建 File 對(duì)象
File file = new File("/Users/wanggang/Desktop/JavaTest/Hello.txt");
// 創(chuàng)建 Scanner 對(duì)象
Scanner sc = new Scanner(file);
// 判斷是否還有輸入
while (sc.hasNextLine()){
// 將輸入接收,否則會(huì)阻塞
sc.nextLine();
//判斷輸入的是否是整數(shù)
while(sc.hasNextInt()) {
// 將整數(shù)存入數(shù)組
arr[i] = sc.nextInt();
I++;
}
}
// 關(guān)閉 Scanner
sc.close();
// 輸出讀取的整數(shù)個(gè)數(shù)
System.out.printf("讀取了 %d 個(gè)數(shù)\n",i);
// 輸出所有讀取的整數(shù)
for(int j = 0; j < i; j++) {
System.out.print(arr[j] + ",");
}
}
}
// 執(zhí)行以上程序輸出結(jié)果為:
// 讀取了 5 個(gè)數(shù)
// 1,2,3,4,5,到此這篇關(guān)于一文帶你掌握J(rèn)ava中Scanner類的使用的文章就介紹到這了,更多相關(guān)Java Scanner類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
intelij?idea?2023創(chuàng)建java?web項(xiàng)目的完整步驟
這篇文章主要給大家介紹了關(guān)于intelij?idea?2023創(chuàng)建java?web項(xiàng)目的完整步驟,該教學(xué)主要針對(duì)各位剛剛接觸javaweb開(kāi)發(fā)的小伙伴,各位學(xué)習(xí)java的朋友也難免會(huì)經(jīng)歷這個(gè)階段,需要的朋友可以參考下2023-10-10
MyBatis-Plus通用枚舉自動(dòng)關(guān)聯(lián)注入的實(shí)現(xiàn)
本文主要介紹了MyBatis-Plus通用枚舉自動(dòng)關(guān)聯(lián)注入的實(shí)現(xiàn),解決了繁瑣的配置,讓 mybatis 優(yōu)雅的使用枚舉屬性,感興趣的可以一起來(lái)了解一下2021-06-06
Java請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向區(qū)別詳解
這篇文章主要介紹了Java請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向區(qū)別詳解,請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向,但二者是完全不同的,所以我們今天就來(lái)盤他們的區(qū)別介紹,需要的朋友可以參考一下2022-07-07
SpringBoot SSO輕松實(shí)現(xiàn)(附demo)
這篇文章主要介紹了SpringBoot SSO輕松實(shí)現(xiàn)(附demo),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
java查找字符串中的包含子字符串的個(gè)數(shù)實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇java查找字符串中的包含子字符串的個(gè)數(shù)實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
Java實(shí)現(xiàn)飛機(jī)大戰(zhàn)-II游戲詳解
《飛機(jī)大戰(zhàn)-II》是一款融合了街機(jī)、競(jìng)技等多種元素的經(jīng)典射擊手游。游戲是用java語(yǔ)言實(shí)現(xiàn),采用了swing技術(shù)進(jìn)行了界面化處理,感興趣的可以了解一下2022-02-02
Java跳過(guò)證書(shū)訪問(wèn)HTTPS詳細(xì)代碼示例
在訪問(wèn)HTTPS網(wǎng)站時(shí),Java會(huì)默認(rèn)檢查SSL證書(shū)是否有效,如果證書(shū)無(wú)效,則會(huì)阻止訪問(wèn),這篇文章主要給大家介紹了關(guān)于Java跳過(guò)證書(shū)訪問(wèn)HTTPS的相關(guān)資料,需要的朋友可以參考下2024-02-02

