如何在Java中检查字符串是否为二进制

悲剧缺陷
   /**
     * Given a String as input, return true if the String represents a valid
     * binary value (i.e. contains only the digits 1 and 0). Returns false if
     * the String does not represent a binary value.
     *
     * @param value
     *            A String value that may contain a binary value
     * @return true if the String value contains a binary value, false otherwise
     */

无论我做什么,它都只会返回 false。我是编程新手,不知道逻辑是如何运行的。感谢您的任何帮助。

public static boolean validBinary(String value) {

    int b = Integer.parseInt(value);
    int binCount = 0;
    for(int i = 0; i < value.length(); i++) {
        int tempB = value.charAt(i);
        if(tempB % 10 == 0 || tempB % 10 == 1) {
            binCount = binCount + 1;
        }
        else {
            binCount = -1;
            break;
        }
    }
    if (binCount > 0) {
        return true;
    }
    else {
        return false;
    }

}
WJS

这是对您的程序的逐步分析。

public static boolean validBinary(String value) {

删除以下内容,因为它没有被使用。

    int b = Integer.parseInt(value);

初始化binCount并启动循环。

    int binCount = 0;
    for(int i = 0; i < value.length(); i++) {
        int tempB = value.charAt(i);

这就是问题开始的地方。即使tempB被声明为一个,int它仍然具有 ASCII 字符的值。因此,“0”到“9”实际上是 48 到 57(包括 48 到 57)。因此,与其转换为整数,不如将它们作为字符进行比较。在这种情况下,您可以忘记 % 运算符。所以新的 if 语句应该是:

    if (tempB == '0' || tempB == '1') {

代替

    if(tempB % 10 == 0 || tempB % 10 == 1) {

保留其余代码,程序应该可以正常工作。

      binCount = binCount + 1;
    }
    else {
            binCount = -1;
            break;
        }
    }
    if (binCount > 0) {
        return true;
    }
    else {
        return false;
    }
}

可能的改进

练习的重点是验证数字是否为二进制。所以你不需要任何簿记,比如bincount这样做。一旦您的测试01失败,只需返回false无需进一步处理。但是如果你完成了整个字符串的检查并且没有通过测试,那么所有的字符都必须是 0 或 1。所以返回true那看起来像这样。

  for(int i = 0; i < value.length(); i++) {
        int tempB = value.charAt(i);
        if (tempB == '0' || tempB == '1') {
             continue; // process next character.
                       // continue skips rest of loop
         }
         return false;
   }
   // no failures, so
   return true;

没有的替代逻辑continue可能是:

  for(int i = 0; i < value.length(); i++) {
        int tempB = value.charAt(i);
        if (tempB != '0' && tempB != '1') {
             return false;
         }
   }
   // no failures, so
   return true;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查字符串是否为二进制

检查字符串是否是数字的二进制表示法

如何检查二进制文件中是否存在字符串?

如何检查通过gui提取的字符串是否是matlab中的二进制字符串?

检查unicode值是否在Erlang二进制字符串中?

如何在Java中将二进制字符串转换为以10为基数的整数

如何在Python中将大负数打包为二进制字符串

如何在Java中检查字符串是否为数字

如何在Java中检查字符串是否为字母数字

如何在Java中将64宽度的二进制字符串转换为long?

如何在Java中将字符串值转换为二进制值

如何在Java中添加两个包含二进制数字的长字符串?

如何在C#.NET中UNHEX()MySQL二进制字符串?

如何在 python 中解码这个二进制字符串?

如何在 Python 中读取二进制字符串

如何在Shell中获取字符串的二进制表示形式?

如何从Java中的标准输入读取python二进制字符串

如何在SQL Server中从包含二进制文字的字符串变量中设置二进制值?

如何在Java中有效地将二进制字符串转换为二进制字节数组?

如何在SQL Server 2005中将十六进制字符串转换为二进制?

检测字符串是否为二进制

如何在C ++中检查字符串中的数据是否为数字?

如何将字符串中字符的 ASCII 值打印为二进制数?

如何拆分(以特定的二进制值包含二进制的字符串?

检查字符串是否为十六进制

如何在shell脚本中检查字符串是否为空?

如何在Go中检查字符串是否全部为大写或小写?

如何在Swift中检查字符串是否为Int?

如何在PowerShell中检查字符串是否为null或为空?