如何验证字符串只使用数字并输出一条消息,说明它必须只是Bluej上的数字

时间:2015-11-27 00:11:12

标签: java regex

我需要让下面的代码验证字符串只使用数字。我做了一个If语句但是每次运行程序时它都会输出一条消息,说明字符串不能是整数。

以下是变量:

private String personalIdNo;

private boolean isValidPersonalIdNo; 

这是我遇到问题的代码,它不会工作它总是输出"不是整数"即使我把它作为所有数字。

public void personalIdValidator()
{

    if (personalIdNo.matches("[0-9]"))
    {
        //Return True
    }
    else{
        isValidPersonalIdNo = false;
        System.out.println("The input is not only int");
    }

}

1 个答案:

答案 0 :(得分:2)

您的检查几乎是正确的,您只需要将personalIdNo.matches("[0-9]")替换为personalIdNo.matches("[0-9]+")personalIdNo.matches("[0-9]*"),具体取决于您是否希望空字符串也有效。

说明:

您当前的模式表示“09之间的单个字符”。字面意思是“一个字符”,例如即使您的代码,“1”或“4”也是有效的输入。 要允许多个字符,有两个选项:

  1. +表示“一个或多个字符”
  2. *表示“零个或多个字符”(即允许空字符串)
  3. (从技术上讲,您也可以使用{min,max}指定具体数字,但我认为这不是您想要的)
  4. 请注意,此模式目前也可以防止负数。如果您还想允许负数,可以使用personalIdNo.matches("-?[0-9]+"),其中?表示“零或一次出现”。

    证明/代码示例:

    public class NumberTest {
    
        public static void main(String[] args) {
            personalIdValidator("");
            personalIdValidator("0");
            personalIdValidator("1");
            personalIdValidator("123");
            personalIdValidator("-123");
            personalIdValidator("--123");
            personalIdValidator("abc");
            personalIdValidator("1a2b3c");
            personalIdValidator("‎٤‎٥‎٦‎٧‎٨‎");
        }
    
        public static void personalIdValidator(String personalIdNo) {
            if (personalIdNo.matches("-?[0-9]+")) {
                System.out.println("The input is only int");
            } else {
                System.out.println("The input is not only int");
            }
        }
    }
    
    // The input is not only int
    // The input is only int
    // The input is only int
    // The input is only int
    // The input is only int
    // The input is not only int
    // The input is not only int
    // The input is not only int
    // The input is not only int