如何确保用户只输入1和0?

时间:2014-05-24 02:46:04

标签: java input binary

我有这个循环让用户卡住输入值,直到他/她输入有效的东西,在这种情况下它必须是二进制数,必须是某种类型变量的大小。尽管如此,我还不知道如何在用户输入由1和0之外的不同内容组成的数字的情况下继续循环。

我在考虑使用string.contains(),但这不能说明每一个数字。这是我的循环:

while((double)inputStr.length() != table.getNumberOfVariables() || 
                    inputStr.replaceAll("\\D","").length() != inputStr.length() ||
                    Double.parseDouble(inputStr) > 1){

这一行:Double.parseDouble(inputStr) > 1应该可以实现,但我正在处理十进制数,所以如果输入是10或100,它们将被渲染为无效。

2 个答案:

答案 0 :(得分:0)

在你的情况下,不是在你的正则表达式中使用\D(任何不是数字的东西),你必须更具体:[^01](意思是:任何不是零或一个)。

while((double)inputStr.length() != table.getNumberOfVariables() || 
       inputStr.replaceAll("[^01]","").length() != inputStr.length() ||
       Double.parseDouble(inputStr) > 1){

虽然它并不能为你赢得一个好的代码奖,因为这段代码的读者很难找到你在做什么。最好将你正在做的事情变成一个名称清晰的方法,例如:

public static boolean containsOnly(String s, String only) {
    for (int i = 0; i < s.length(); i++) {
        if (only.indexOf(s.charAt(i)) == -1)
            return false;
    }
    return true;
}

实际上,Apache commons-lang3库中有这样一种方法:StringUtils.containsOnly。它们有许多字符串操作方法,它们比使用正则表达式更清晰,通常要快得多。

答案 1 :(得分:0)

您可以使用正则表达式来验证二进制字符串:

    String s = "0101110";
    if (s.matches("[01]++")) {
        System.out.println("ok");
    } else {
        System.out.println("invalid");
    }