Check số và String trong Java

Mh mới học Java. Mọi người trong diễn đàn ai rành về Java cho mh hỏi chút ạ! Trong Java có hàm nào kiểm tra xem đó có phải là 1 ký tự, 1 string hay 1 số không? Ví dụ:
Mh yêu cầu người dùng nhâp từ bàn phím là 1 số, nếu người dùng nhập kí tự hay String thì yêu cầu nhập lại. Và ngược lại, yêu cầu nhập 1 String nếu nhập số yêu cầu nhâp lại.
Mh có 1 bài cụ thể như sau: Khi mh nhập số trong kiểu String thì nó sẽ bug ra lỗi:

Theo mình có 2 cách:

  • Bạn xử lý exception, nếu người dùng nhập sai thì bạn thông báo họ phải nhập số rồi cho nhập lại
  • Theo code trên có vẻ như là bạn dùng scanner cho nextInt() theo mình thì không nên vì dữ liệu nhập vào thường là text, bạn có thể dùng scannner.nextLine() rồi xong đó bạn format lại dữ liệu nhập vào về kiểu int nếu lỗi thì bạn xử lý exception như cách 1 cho người dùng nhập lại đến khi nào format được thì thôi.
    P/s: Mình cũng mới học mong mọi người giúp đỡ <3
5 Likes
bool inputFinish = false;
int number;
while (!inputFinish)
try
{
    number = scanner.nextInt();
    inputFinish = true;
}
catch (Exception ignore)
{
//Bỏ qua hoặc thông báo gì đó yêu cầu nhập lại
}
4 Likes
  public static boolean isNumeric(final CharSequence cs) {
        if (isEmpty(cs)) {
            return false;
        }
        final int sz = cs.length();
        for (int i = 0; i < sz; i++) {
            if (!Character.isDigit(cs.charAt(i))) {
                return false;
            }
        }
        return true;
    }


Dùng Character check được

4 Likes

Dùng regex

  • Số là 1 ký tự thuộc [0-9] xuất hiện 1 hoặc nhiều lần, regex là \\d+
  • Nếu là số âm sẽ có dấu trừ phía trước, regex là -?\\d+
  • Nếu là số thập phân có dấu chấm (.), sau dấu chấm là một hoặc nhiều ký tự số, regex là -?\\d+(\\.\\d+)?

Code

public static boolean isNumeric(String str) {
	return str.matches("-?\\d+(\\.\\d+)?");
}

public static void main(String[] args) throws IOException {
	BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
	while (true) {
		System.out.print("Nhập vào một số: ");
		String input = buff.readLine();
		if (isNumeric(input)) {
			System.out.println("OK :D");
			return;
		}
		System.out.println("Sai rồi!");
	}
}
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?