String Java之间的按位运算符

时间:2017-03-19 09:53:21

标签: java bitwise-operators bitwise-and bitwise-or

我想在Java中使用字符串之间的按位运算符(stirngs具有不同的长度)。

实际上,如果我有两个字符串

例如 s1 = test s2 = sampleJAVA

我将strngs转换为二进制文件:

s1Binary = 01110100 01100101 01110011 01110100

s2Binary = 01110011 01100001 01101101 01110000 01101100 01100101 01001010 01000001 01010110 01000001

我想计算两个按位运算符

  1. s1Binary | s2Binary
  2. s1Binary& s2Binary
  3. 我尝试了两个字符串:

     String s1 = "test";
     byte[] a = s1.getBytes();
     String s1Binary = "";
     for (int i = 0; i < a.length; i++) {
          s1Binary = s1Binary + String.format("%8s", Integer.toBinaryString(a[i] & 0xFF)).replace(' ', '0');
      }
     /////// s2 /////
     String s2 = "sampleJAVA";
     byte[] b = s2.getBytes();
     String s2Binary = "";
     for (int i = 0; i < b.length; i++) {
          s2Binary = s2Binary + String.format("%8s", Integer.toBinaryString(b[i] & 0xFF)).replace(' ', '0');
      }
    

    但我坚持下去因为我有两个不同(二进制)长度的字符串

2 个答案:

答案 0 :(得分:1)

您可以使用前导零填充较短的字符串。

01110100 01100101 01110011 01110100

进入 00000000 00000000 00000000 00000000 00000000 00000000 01110100 01100101 01110011 01110100

答案 1 :(得分:1)

您可以像这样使用BigInteger。

String s1Binary = "01110100011001010111001101110100";
String s2Binary = "01110011011000010110110101110000011011000110010101001010010000010101011001000001";
BigInteger b1 = new BigInteger(s1Binary, 2);
BigInteger b2 = new BigInteger(s2Binary, 2);
System.out.println(b1.and(b2).toString(2));
System.out.println(b1.or(b2).toString(2));