HOWTO · Java
Java 中的輸入驗證
本文介紹如何在 Java 中驗證輸入。
本頁內容
驗證是根據特定約束檢查使用者輸入或資料庫中的值的過程。應用驗證以減少程式執行實際業務邏輯以及在使用者輸入中查詢問題所花費的時間。該過程提高了效能,因此在失敗的情況下會導致任何進一步的除錯會話。
在 Java 程式碼中,我們使用 Scanner 類獲取使用者輸入。Scanner 類有多種方法可以幫助驗證輸入內容。
下面是解釋這些方法的程式碼塊。
import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter any text: ");
while (!scanner.hasNext("quit")) {
System.out.println(scanner.hasNextInt() ? "The Input text is int: " + scanner.nextInt()
: scanner.hasNextLong() ? "The Input text is long: " + scanner.nextLong()
: scanner.hasNextDouble() ? "The Input text is double: " + scanner.nextDouble()
: scanner.hasNextBoolean() ? "The Input text is boolean: " + scanner.nextBoolean()
: "The Input text is String: " + scanner.next());
}
}
}
在上面的程式碼塊中,建立了 Scanner 類的一個例項。使用 new 關鍵字的建構函式呼叫採用 Input Stream 引數,例如 System.in。
現在開始對 Scanner 例項進行實際工作。首先,在 while 條件中,應用檢查以給出終止條件。該表示式使用 Scanner 類 hasNext 方法。該方法採用與輸入標記匹配的模式。並檢查輸入是否是 quit 文字以外的任何內容。當 Scanner 物件關閉時,hasNext 方法會丟擲 IllegalStateException。
現在,當塊被啟動時,使用 hasNextInt 方法驗證輸入。只有當輸入的文字是 int 值時,它才返回 true。使用 nextInt 方法從控制檯將輸入文字作為 int 掃描並列印在控制檯上。nextInt() 方法在文字與整數正規表示式不匹配時丟擲 InputMismatchException,當 Scanner 例項關閉時丟擲 IllegalStateException。
現在整個檢查塊都寫在巢狀的三元語句中。如果第一個條件被評估為假,則應用另一項檢查。hasNextDouble 方法將文字解釋為 double 並在匹配時返回 true。nextDouble() 方法從標準輸出返回一個雙精度值,並在控制檯中列印相同的值,否則為下一次檢查而移動。nextDouble() 方法在來自控制檯的下一個標記與 Float Regex 不匹配時丟擲 InputMismatchException,當 Scanner 例項關閉時丟擲 IllegalStateException。
另一項檢查是使用 hasNextBoolean 方法。此方法檢查 boolean 值,真或假。如果返回值是布林值 true,則使用 nextBoolean() 來獲取控制檯輸入並將其列印到輸出螢幕。否則,它繼續使用三元運算子 else 部分。nextBoolean 方法在下一個標記沒有找到布林值時丟擲 InputMismatchException,當 Scanner 例項關閉時丟擲 IllegalStateException。
遵循相同的模式,使用 next 方法驗證輸入。該方法成為 while 輸入檢查部分的最後一個條件。該方法從控制檯搜尋並返回整個前面的文字。該功能可能會在等待輸入掃描時阻止控制檯輸出。該方法始終返回一個字串值。評估也將特殊字元視為字串並在輸出中列印。與其他方法一樣丟擲相同的異常。如果 Scanner 已關閉,則說 IllegalStateException,或者在沒有更多令牌可用時說 NoSuchElementException。
下面是上述驗證程式碼的輸出塊。
Enter any text:
--
The input text is String: --
67
The input text is int: 67
1234567890000000
The input text is long: 1234567890000000
true
The input text is boolean: true
FALSE
The input text is boolean: false
90.08939782639
The input text is double: 90.08939782639
hi
The input text is String: hi
quit