如何在单个字符串中查找二进制值的数字之和

时间:2017-09-24 19:40:11

标签: java string binary sum

我是Java的新手,并且有一个关于将Java中单个二进制值的数字加在一起的问题。

例如,

如果二进制值的偶数为1,我想将字符串“even”输出到另一个方法。如果有一个奇数1,那么我想输出字符串值“奇数”。

以下是我的代码示例:

    String eoro;
    String name = "1010101011";
    int num = Integer.parseInt(name, 2);
    System.out.println(num);
    if(num % 2 == 0)
        eoro = "even";
    else
        eoro = "odd";
    System.out.println(eoro);

输出显示为

    683
    odd

我不确定Integer.parseInt(name,2);这是正确的方法,但我不知道另一种求和单个String值的数字的方法。

请不要粗鲁,谢谢你能提供的任何帮助!

4 个答案:

答案 0 :(得分:1)

最短的可能是:

new BigInteger(value, 2).bitCount();

new BigInteger(value, 2)将字符串解析为二进制整数,bitCount()计算位数。我使用BigInteger,因为它不清楚,字符串可能有多长。如果您确定字符串足够短,可以使用IntegerLong或其他类型。

或者你可以在字符串中找到1

    int result = 0;
    for (char c: value.toCharArray()) {
        result += c == '1' ? 1 : 0;
    }

答案 1 :(得分:0)

Integer.parseInt绝对不是正确的方法。它会将给定的字符串解析为整数,但奇数或偶数的整数与“1”的数字无关。例如,请考虑以下事项:

public static void main(String[] args) {
    String eoro;
    String name = "10";
    int num = Integer.parseInt(name, 2);
    System.out.println(num);
    if(num % 2 == 0)
        eoro = "even";
    else
        eoro = "odd";
    System.out.println(eoro);
}

这将打印

  

2
  甚至

这不是您想要的输出。

在字符串中计算1的简单方法是对其字符进行流式处理并计算它们:

long numOnes = name.chars().filter(c -> c == '1').count();

答案 2 :(得分:0)

public static void main(String[] args) {
    // declare variables
    String name = "1010101011";
    String eoro = (name.chars().filter(c -> c == '1').count() % 2 == 0)?"even":"odd";

    System.out.print(eoro);
    }

答案 3 :(得分:-1)

  

如果二进制值的偶数为1,我想输出字符串“even”

仅仅因为二进制值的偶数为1并不意味着该数字的十进制表示为偶数值,或num % 2 == 0。例如,如果您有1作为最低有效值,就像您在这里一样,这将始终使值为奇数。

您可以使用循环计数,或者像这样。

int ones = name.replace("0", "").length();
if (ones % 2 == 0)
    System.out.println("even");
else
    System.out.println("odd"); 

参考:Java: How do I count the number of occurrences of a char in a String?