Java的Scanner類在處理非法字符時,通常會遇到以下幾種情況:
輸入流結(jié)束(EOF):當(dāng)輸入流到達(dá)末尾時,Scanner會拋出NoSuchElementException。這意味著你已經(jīng)到達(dá)了輸入的結(jié)尾,無法再讀取更多的字符。
非整數(shù)輸入:當(dāng)你嘗試使用nextInt()、nextLong()等方法讀取整數(shù)時,如果輸入了非整數(shù)字符,Scanner會拋出InputMismatchException。
非數(shù)字字符:當(dāng)你嘗試使用nextDouble()、nextFloat()等方法讀取浮點數(shù)時,如果輸入了非數(shù)字字符,Scanner會拋出InputMismatchException。
空白字符:當(dāng)你嘗試讀取下一個token時,如果輸入了空白字符(如空格、制表符或換行符),Scanner會自動忽略它們。
要處理這些異常,你可以使用try-catch語句捕獲異常并采取相應(yīng)的措施。例如:
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.println("請輸入一個整數(shù):");
int num = scanner.nextInt();
System.out.println("你輸入的整數(shù)是:" + num);
} catch (InputMismatchException e) {
System.out.println("輸入錯誤,請輸入一個整數(shù)!");
} catch (NoSuchElementException e) {
System.out.println("輸入流結(jié)束。");
} finally {
scanner.close();
}
}
}
在這個例子中,我們使用try-catch語句捕獲了可能的InputMismatchException和NoSuchElementException異常。如果發(fā)生異常,程序會輸出相應(yīng)的錯誤信息。最后,我們使用finally語句確保Scanner對象被正確關(guān)閉。