欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Scanner類基礎(chǔ)使用、可能遇到的問題及注意事項(xiàng)

 更新時(shí)間:2025年04月08日 09:39:00   作者:magic?245  
Scanner類是一個(gè)用于Scanner指的是java.util包下的Scanner類,可以接收控制臺(tái)輸入的數(shù)據(jù),這篇文章主要介紹了Java中Scanner類基礎(chǔ)使用、可能遇到的問題及注意事項(xiàng)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、Scanner 類概述

Scanner 類是 Java 中用于獲取用戶輸入的一個(gè)實(shí)用類,它位于 java.util 包下。

通過 Scanner 類,可以方便地從多種輸入源(比如標(biāo)準(zhǔn)輸入流,也就是鍵盤輸入,或者文件等)讀取不同類型的數(shù)據(jù),例如整數(shù)、小數(shù)、字符串等,大大簡(jiǎn)化了輸入操作相關(guān)的編程工作。

二、Scanner 類的創(chuàng)建

在使用 Scanner 類之前,需要先創(chuàng)建它的對(duì)象。如果要從標(biāo)準(zhǔn)輸入(鍵盤)讀取數(shù)據(jù),創(chuàng)建示例代碼如下:

import java.util.Scanner;

public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 后續(xù)可使用該scanner對(duì)象進(jìn)行輸入讀取操作
    }
}

這里通過 new Scanner(System.in) 創(chuàng)建了一個(gè) Scanner 對(duì)象,System.in 表示標(biāo)準(zhǔn)輸入流,意味著后續(xù)操作將從鍵盤獲取輸入內(nèi)容。

三、常用方法及讀取不同類型數(shù)據(jù)

1.讀取整數(shù)

使用 nextInt() 方法可以讀取用戶輸入的整數(shù),示例代碼如下:

import java.util.Scanner;

public class ReadInt {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請(qǐng)輸入一個(gè)整數(shù):");
        int num = scanner.nextInt();//程序執(zhí)行到這里就會(huì)停下來,等待鍵盤的輸入。
                                    //鍵盤如果沒有輸入,這里就會(huì)一直卡著
            //直到用戶輸入了內(nèi)容之后,敲回車,這行代碼就執(zhí)行結(jié)束了
             //這樣就完成了數(shù)據(jù)從控制臺(tái)到內(nèi)存

        System.out.println("你輸入的整數(shù)是: " + num);
        scanner.close();
    }
}

這里提示用戶輸入整數(shù)后,調(diào)用 nextInt() 方法獲取輸入并賦值給 int 類型的變量 num,最后輸出展示讀取到的整數(shù)內(nèi)容。需要注意的是,在讀取完成后,如果不再需要使用該 Scanner 對(duì)象,最好調(diào)用 scanner.close() 方法關(guān)閉它,以釋放相關(guān)資源。

注意:針對(duì)nextInt()方法來說,只能接收整數(shù)數(shù)字。輸入其他的字符串會(huì)報(bào)錯(cuò)。

2.讀取浮點(diǎn)數(shù)(小數(shù))

若要讀取浮點(diǎn)數(shù),可以使用 nextFloat() 方法(讀取單精度浮點(diǎn)數(shù)) 或者 nextDouble() 方法(讀取雙精度浮點(diǎn)數(shù)),示例代碼如下:

import java.util.Scanner;

public class ReadFloat {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請(qǐng)輸入一個(gè)單精度浮點(diǎn)數(shù):");
        float fNum = scanner.nextFloat();
        System.out.println("你輸入的單精度浮點(diǎn)數(shù)是: " + fNum);

        System.out.println("請(qǐng)輸入一個(gè)雙精度浮點(diǎn)數(shù):");
        double dNum = scanner.nextDouble();
        System.out.println("你輸入的雙精度浮點(diǎn)數(shù)是: " + dNum);

        scanner.close();
    }
}

上述代碼分別演示了讀取單精度和雙精度浮點(diǎn)數(shù)的過程,按照提示輸入相應(yīng)類型的小數(shù),就能通過對(duì)應(yīng)方法獲取并輸出展示。

3.讀取字符串

讀取字符串有兩種常用方式,一種是 next() 方法,一種是 nextLine() 方法。

(1).next() 方法: 它讀取輸入的下一個(gè)單詞(以空格、制表符等空白字符作為分隔符)

細(xì)節(jié):從鍵盤上接收一個(gè)字符串,但是接收的是第一個(gè)空格之前的內(nèi)容

示例代碼1:

import java.util.Scanner;

public class ReadStringNext {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請(qǐng)輸入一些單詞(以空格分隔):");
        String word = scanner.next();
        System.out.println("你輸入的單詞是: " + word);
        scanner.close();
    }
}

輸入多個(gè)單詞時(shí),它只會(huì)獲取第一個(gè)單詞并返回。

示例代碼2:

import java.util.Scanner;
public class scannerTest {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        String username=s.next();
        System.out.println(username);
    }
}

(2).nextLine() 方法:

該方法讀取輸入的一整行內(nèi)容,示例代碼:

import java.util.Scanner;

public class ReadStringNextLine {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請(qǐng)輸入一行文字:");
        String line = scanner.nextLine();
        System.out.println("你輸入的文字內(nèi)容是: " + line);
        scanner.close();
    }
}

它會(huì)獲取從當(dāng)前位置到行尾的所有字符,更適合讀取完整的語(yǔ)句等情況。

注意:從鍵盤上接收一個(gè)字符串,但是接收的是第一個(gè)換行符\n之前的內(nèi)容

可能遇到的問題及注意事項(xiàng)

1.輸入不匹配異常

如果用戶輸入的數(shù)據(jù)類型和期望讀取的數(shù)據(jù)類型不一致,例如:期望讀取整數(shù),但用戶輸入了字母等非數(shù)字內(nèi)容,會(huì)拋出 InputMismatchException 異常。所以在實(shí)際應(yīng)用中,可能需要添加異常處理代碼來讓程序更健壯,示例如下:

import java.util.InputMismatchException;
import java.util.Scanner;

public class ExceptionHandle {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try {
            System.out.println("請(qǐng)輸入一個(gè)整數(shù):");
            int num = scanner.nextInt();
            System.out.println("你輸入的整數(shù)是: " + num);
        } catch (InputMismatchException e) {
            System.out.println("輸入的數(shù)據(jù)類型不正確,請(qǐng)重新輸入整數(shù)!");
        } finally {
            scanner.close();
        }
    }
}

這里使用 try-catch 語(yǔ)句塊捕獲可能出現(xiàn)的輸入類型不匹配異常,并在 catch 塊中給出相應(yīng)提示,無論是否出現(xiàn)異常,最終都會(huì)在 finally 塊中關(guān)閉 Scanner 對(duì)象。

2.nextLine() 方法使用的坑

由于nextInt()只讀取整數(shù),不讀取后續(xù)的換行符,這會(huì)導(dǎo)致nextLine()在下一次調(diào)用時(shí)直接讀取空字符串。解決方法是使用nextLine()獲取整數(shù)后的換行符,避免空字符導(dǎo)致的跳過輸入現(xiàn)象。

import java.util.Scanner;
public class scannerTest {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        String username=s.next(); //無論是next(),還是nextInt(),nextDouble()這幾個(gè)方法接收的是第一個(gè)空格之前的內(nèi)容
                         //而對(duì)于 son依舊留在緩存中,其在緩存的格式為 son\r(回車符)
        System.out.println(username);

        String position=s.nextLine();//執(zhí)行到這一行時(shí),nextLine回去緩存讀內(nèi)容,而讀到\r時(shí)就結(jié)束了
                                     //即讀取了 son
                                     //所以這一行的運(yùn)行,用戶無法輸入東西
        System.out.println(position);

        String name =s.nextLine();
        System.out.println(name);
    }
}

運(yùn)行結(jié)果:

當(dāng)在調(diào)用 nextInt() 或者其他讀取基本類型的方法(如 nextFloat() 等)后緊接著調(diào)用 nextLine() 方法時(shí),可能會(huì)出現(xiàn)問題。因?yàn)?nextInt() 等方法讀取數(shù)據(jù)后,留下的換行符(回車鍵對(duì)應(yīng)的字符)會(huì)被 nextLine() 當(dāng)作輸入內(nèi)容讀取,導(dǎo)致 nextLine() 似乎 “跳過” 了用戶的輸入。解決辦法通常是在調(diào)用 nextLine() 之前,先額外調(diào)用一次 nextLine() 來消耗掉前面留下的換行符,示例如下:

import java.util.Scanner;

public class NextLineIssue {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請(qǐng)輸入一個(gè)整數(shù):");
        int num = scanner.nextInt();
        scanner.nextLine(); // 消耗掉換行符

        System.out.println("請(qǐng)輸入一行文字:");
        String line = scanner.nextLine();
        System.out.println("你輸入的文字內(nèi)容是: " + line);

        scanner.close();
    }
}

總之,Scanner 類在 Java 中是很常用的用于處理輸入的類,掌握好它的使用方法以及注意相關(guān)問題,能更好地實(shí)現(xiàn)具有交互性的 Java 程序。

總結(jié)

到此這篇關(guān)于Java中Scanner類基礎(chǔ)使用、可能遇到的問題及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)Java基礎(chǔ)Scanner類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot與ActiveMQ整合的步驟

    Spring Boot與ActiveMQ整合的步驟

    今天小編就為大家分享一篇關(guān)于Spring Boot與ActiveMQ整合的步驟,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java 創(chuàng)建PDF打印小冊(cè)子案例

    Java 創(chuàng)建PDF打印小冊(cè)子案例

    這篇文章主要給大家分享Java 創(chuàng)建PDF打印小冊(cè)子案例,PDF打印小冊(cè)子是指將PDF格式文檔在打印成刊物前需要提前進(jìn)行的頁(yè)面排版,以便在打印后裝訂成冊(cè),下面文章內(nèi)容我們將下面以Java代碼展示如何來實(shí)現(xiàn),需要的朋友可以參考一下
    2021-10-10
  • Java內(nèi)存模型原子性原理及實(shí)例解析

    Java內(nèi)存模型原子性原理及實(shí)例解析

    這篇文章主要介紹了Java內(nèi)存模型原子性原理及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot AOP如何配置全局事務(wù)

    SpringBoot AOP如何配置全局事務(wù)

    這篇文章主要介紹了SpringBoot AOP如何配置全局事務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中接口的多態(tài)詳解

    Java中接口的多態(tài)詳解

    大家好,本篇文章主要講的是Java中接口的多態(tài)詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • 詳解RabbitMQ中延遲隊(duì)列結(jié)合業(yè)務(wù)場(chǎng)景的使用

    詳解RabbitMQ中延遲隊(duì)列結(jié)合業(yè)務(wù)場(chǎng)景的使用

    這篇文章主要介紹了詳解RabbitMQ中延遲隊(duì)列結(jié)合業(yè)務(wù)場(chǎng)景的使用,延遲隊(duì)列中的元素都是帶有時(shí)間屬性的,延遲隊(duì)列就是用來存放需要在指定時(shí)間被處理的元素的隊(duì)列,需要的朋友可以參考下
    2023-05-05
  • 解決@JsonIgnore的使用以及自己踩坑

    解決@JsonIgnore的使用以及自己踩坑

    這篇文章主要介紹了解決@JsonIgnore的使用以及自己踩坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring Security之默認(rèn)的過濾器鏈及自定義Filter操作

    Spring Security之默認(rèn)的過濾器鏈及自定義Filter操作

    這篇文章主要介紹了Spring Security之默認(rèn)的過濾器鏈及自定義Filter操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java中byte[]、String、Hex字符串等轉(zhuǎn)換的方法

    Java中byte[]、String、Hex字符串等轉(zhuǎn)換的方法

    這篇文章主要介紹了Java中byte[]、String、Hex字符串等轉(zhuǎn)換的方法,代碼很簡(jiǎn)單,需要的朋友可以參考下
    2018-05-05
  • spring 自定義讓@Value被解析到

    spring 自定義讓@Value被解析到

    這篇文章主要介紹了spring 自定義讓@Value被解析到,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論