Я хочу использовать побитовые операторы между строками (строки не одинаковой длины) в Java.

На самом деле, в случае, если у меня есть две строки

Например, s1 = test s2 = sampleJAVA

Я конвертирую строки в двоичный файл:

s1Binary = 01110100 01100101 01110011 01110100

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

И я хочу вычислить два побитовых оператора

  1. s1Binary | s2Binary
  2. s1Binary & s2Binary

Я попробовал две строки:

 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');
  }

Но я застрял там, потому что у меня есть две строки с различной (двоичной) длиной

1
Anon 19 Мар 2017 в 12:53

2 ответа

Лучший ответ

Вы можете использовать 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));
1
saka1029 19 Мар 2017 в 10:15

Вы можете дополнить более короткую строку ведущими нулями.

Поворот 01110100 01100101 01110011 01110100

В 00000000 00000000 00000000 00000000 00000000 00000000 01110100 01100101 01110011 01110100

1
Alon Segal 19 Мар 2017 в 09:57