将 0 和 1 的字符串转换为字节

Convert Strings of 0 & 1 into bytes

我有两个字符串:

String a = "11111";
String b = "10001";

我想用 "&" 运算符进行按位比较。

最好的方法是什么?

使用基数为 2 的 parseLong(您也可以使用字节和整数 类 中的类似函数,具体取决于字符串的最大大小):

long ba = parseLong(a, 2);
long bb = parseLong(b, 2);
long bc = ba & bb;

您可以使用 Integer.parseInt( String s, int radix) or Long.parseLong( String s, int radix)

String a = "11111";
String b = "10001";
int ia = Integer.parseInt( a, 2);
int ib = Integer.parseInt( b, 2 );
int c = ib & ic; 
  1. 首先,将每个二进制 String 转换为具有 Long.parseLong(s, 2)long 值。此方法将使用基数 2 解析给定的字符串,这意味着它应该将字符串解释为二进制。
  2. 计算与 & 对两个 long 值的按位比较。
  3. 使用 Long.toBinaryString(i).
  4. 将其转换回二进制字符串

这是一个示例代码:

public static void main(String[] args) {
    String a = "11111";
    String b = "10001";
    long la = Long.parseLong(a, 2);
    long lb = Long.parseLong(b, 2);
    long lc = la & lb;
    String c = Long.toBinaryString(lc);

    System.out.println(c); // prints 10001
}

另一种不使用原始 long 值的方法是通过遍历数字并将其代码点的 & 结果存储在 StringBuilder 中来手动完成:

public static void main(String[] args) {
    String a = "11111";
    String b = "10001";

    StringBuilder sb = new StringBuilder(a.length());
    for (int i = 0; i < a.length(); i++) {
        sb.appendCodePoint(a.codePointAt(i) & b.codePointAt(i));
    }
    String c = sb.toString();

    System.out.println(c);
}