一文帶你掌握Java中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í)行以上程序輸出結果為: // 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í)行以上程序輸出結果為: // nextLine方式接收: // juejin cn // 輸入的數(shù)據(jù)為:juejin cn // Process finished with exit code 0
nextLine 方法可以看到 cn 字符串輸出。
next() 與 nextLine() 區(qū)別:
next():
- 1、一定要讀取到有效字符后才可以結束輸入。
- 2、對輸入有效字符之前遇到的空白,next() 方法會自動將其去掉。
- 3、只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結束符。
- next() 不能得到帶有空格的字符串。
nextLine():
- 1、以Enter為結束符,也就是說 nextLine()方法返回的是輸入回車之前的所有字符。
- 2、可以獲得空白。
如果要輸入 int 或 float 類型的數(shù)據(jù),在 Scanner 類中也有支持,但是在輸入之前最好先使用 hasNextXxx() 方法進行驗證,再使用 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("關閉輸入"); scan.close(); } } // 執(zhí)行以上程序輸出結果為: // 輸入整數(shù):12 // 整數(shù)數(shù)據(jù):12 // 輸入小數(shù):1.2 // 小數(shù)數(shù)據(jù):1.2 // 關閉輸入 // Process finished with exit code 0
以下實例我們可以輸入多個數(shù)字,并求其總和與平均數(shù),每輸入一個數(shù)字用回車確認,通過輸入非數(shù)字來結束輸入并輸出執(zhí)行結果:
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í)行以上程序輸出結果為(輸入非數(shù)字來結束輸入): // 請輸入數(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++; } } // 關閉 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í)行以上程序輸出結果為: // 讀取了 5 個數(shù) // 1,2,3,4,5,
到此這篇關于一文帶你掌握Java中Scanner類的使用的文章就介紹到這了,更多相關Java Scanner類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
intelij?idea?2023創(chuàng)建java?web項目的完整步驟
這篇文章主要給大家介紹了關于intelij?idea?2023創(chuàng)建java?web項目的完整步驟,該教學主要針對各位剛剛接觸javaweb開發(fā)的小伙伴,各位學習java的朋友也難免會經(jīng)歷這個階段,需要的朋友可以參考下2023-10-10MyBatis-Plus通用枚舉自動關聯(lián)注入的實現(xiàn)
本文主要介紹了MyBatis-Plus通用枚舉自動關聯(lián)注入的實現(xiàn),解決了繁瑣的配置,讓 mybatis 優(yōu)雅的使用枚舉屬性,感興趣的可以一起來了解一下2021-06-06Java請求轉(zhuǎn)發(fā)和請求重定向區(qū)別詳解
這篇文章主要介紹了Java請求轉(zhuǎn)發(fā)和請求重定向區(qū)別詳解,請求轉(zhuǎn)發(fā)和請求重定向,但二者是完全不同的,所以我們今天就來盤他們的區(qū)別介紹,需要的朋友可以參考一下2022-07-07SpringBoot SSO輕松實現(xiàn)(附demo)
這篇文章主要介紹了SpringBoot SSO輕松實現(xiàn)(附demo),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01java查找字符串中的包含子字符串的個數(shù)實現(xiàn)代碼
下面小編就為大家?guī)硪黄猨ava查找字符串中的包含子字符串的個數(shù)實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06