Làm thế nào để kiểm tra đầu vào scanner của dữ liệu là hợp lệ trong Java? (How to check scanner input is valid in Java?)



Nội dung của bài viết này là muốn truyền dữ liệu được nhập vào từ bàn phím(keyboard) thông qua lớp Scanner của Java và gắn nó với một kiểu dữ liệu nào đó(String, int, date...)  và kiểm tra xem dữ liệu đầu vào có hợp lệ với kiểu dữ liệu hay không?



Lớp java.util.Scanner được tạo ra để thu thập các dữ liệu được nhập từ từ bàn phím (keyboard) và ta có thể sử dụng được code.

Ví dụ dưới đây sẽ lấy dữ liệu từ bàn phím và gán nó vào một biến INT nếu dữ liệu này không hợp lệ thì ứng dụng sẽ quăng ra lỗi, còn nếu hợp lệ thì nó sẽ in dữ liệu nhập từ keyboard ra màn hình.

/**
 * @(#)JavaCheckSannerInputValid.java
 *
 * JavaCheckSannerInputValid application
 *
 * @author developer.bnson@live.com
 * @version 1.00 2014/3/28
 */

import java.util.*;

public class JavaCheckSannerInputValid {

   public static void main(String[] args) {

      Scanner sc = new Scanner(System.in);

      try {

         System.out.print("Enter Integer: ");
         int i = sc.nextInt();
         System.out.println("Date your capture: " + i);

      } catch (InputMismatchException e) {
         System.out.println("Data input is'nt Integer.");
         System.out.println("Message error!");
         System.out.println(e.getMessage());
         System.out.println("Detail content error!");
         e.printStackTrace();
        
      }
   }
}


Khi chạy ứng dụng sẽ yêu cầu nhập dữ liệu từ keyboar vào, đầu tiên tôi sẽ nhập dữ liệu là "VNLIVES.NET" để xem chuyện gì sẽ xảy ra.


Tiếp theo tôi chạy lại ứng dụng một lần nữa và nhập giá trị hợp lệ để xem kết quả.
























2 comments:

  1. Nếu bạn nhập vào input là "123 abc" thì nó vẫn pass nhé nên đây ko phải là 1 cách valid tối ưu

    ReplyDelete
  2. anh ơi cho em hỏi..nếu nhập dữ liệu là tuổi thì phải nhập bằng chữ số.vậy nếu nhập vào không phải là chữ số mà yêu cầu nhập đến khi là chữ số thì làm thế nào ạ

    If age is not a number, request to enter until it is number

    ReplyDelete