【问题标题】:Binary addition of Strings字符串的二进制加法
【发布时间】:2020-01-08 06:13:32
【问题描述】:

我需要组合一个字符串数组,如下所示(因此结果字符串中的每个字符都是输入字符串中字符的按位 &)

String a = "10110001"
String b = "01101101"
String c = "10101011"

String result = "00100001"

我想出的解决方案:

long resultLong = 0;

for( String a : inputs )
{
    resultLong = resultLong & Long.parseLong( a ,2);
}

String result = Long.toBinaryString( resultLong );

输入字符串中的字符数可能很长,上面的解决方案不起作用(NumberFormatException)。我无法理解如何实现这一点,最干净的方法是什么?

【问题讨论】:

  • 有多长很长?
  • @khelwood 3600 个字符

标签: java string binary


【解决方案1】:

如果 Long 不足以满足您的用例,那么您可以使用 BigInteger

BigInteger(String val, int radix);

它以字符串和基数作为参数。

BigInteger result = new BigInteger(inputs[0], 2);

for (int i = 1; i < inputs.length; i++) {
    result = result.and(new BigInteger(inputs[i], 2));
}

String resultStr = result.toString(2);

【讨论】:

  • 这为我在问题中给出的输入提供了 op 100001,因此缺少前导 0
  • @Chillax 100001 是正确答案。如果需要达到预期长度,可以用前导零填充它。
  • @khelwood Clear
  • 很高兴注意到结果可以按位计算(或按字符计算,如果您愿意),因此数值的最大长度不应与答案有任何关系。 ..
【解决方案2】:

这是你的算法。这适用于任意数量的Strings,前提是所有Strings 的长度相同:

public static void main(String[] args) {
    String a = "10110001";
    String b = "01101101";
    String c = "10101011";

    String arr[] = new String[]{a, b, c};

    String finalString = "";
    for (int i = 0; i < arr[0].length(); i++) {
        int temp = Integer.parseInt("" + arr[0].charAt(i));
        for (int j = 1; j < arr.length; j++) {
            temp = temp & Integer.parseInt("" + arr[j].charAt(i));
        }
        finalString += temp;
    }
    System.out.println(finalString);
}

O/P

00100001

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2017-03-22
    • 2016-02-26
    • 1970-01-01
    • 2012-08-27
    • 2015-11-21
    相关资源
    最近更新 更多