Java 二进制字符串的位反转

Java 二进制字符串的位反转,java,binary,invert,Java,Binary,Invert,我想反转二进制字符串中的位。例如,字符串000应反转为111,1101应反转为0010。有人能帮上忙吗?一种方法:使用replaceAll()方法: s = s.replace('0', '2').replace('1', '0').replace('2', '1'); String s = "01010"; s = s.replaceAll("0", "x"); s = s.replaceAll("1", "0"); s = s.replaceAll("x", "1"); System.

我想反转二进制字符串中的位。例如,字符串000应反转为111,1101应反转为0010。有人能帮上忙吗?

一种方法:使用
replaceAll()
方法:

s = s.replace('0', '2').replace('1', '0').replace('2', '1');
String s = "01010";

s = s.replaceAll("0", "x");
s = s.replaceAll("1", "0");
s = s.replaceAll("x", "1");

System.out.println(s);
输出:

10101
注意:

10101
这可以简化链接调用:

s = s.replaceAll("0", "x").replaceAll("1", "0").replaceAll("x", "1");

检查这个,这里的输入是intger,但您可以轻松地将字符串转换为int,我希望这不会是一个大任务

int i= 100;
System.out.println(Integer.toBinaryString(~i));

您可以使用此技巧来交换0和1

String s = "00011";
char[] chars = new char[s.length()];
for(int i = 0; i < s.length(); i++)
    chars[i] = (char) (s.charAt(i) ^ 1); // flip the bottom bit so 0=>1 and 1=>0
String flipped = new String(chars);
// flipped = "11100"
String s=“00011”;
char[]chars=新字符[s.length()];
对于(int i=0;i1和1=>0
字符串翻转=新字符串(字符);
//翻转=“11100”

使用Apache commons lang库,您可以获得一种简便的方法来实现这一点:

StringUtils.replaceChars(mystr, "01", "10");
基本上,它用相应的字符(索引对应)替换字符

这是litte测试程序

import org.apache.commons.lang.StringUtils;

public class InvertString {
    public static void main(String[] args) {
        System.out.println(invert("0001011"));
        System.out.println(invert("000"));
        System.out.println(invert("1101"));
    }

    private static String invert(String string) {
        return StringUtils.replaceChars(string, "01", "10");
    }
}
它的输出是

1110100
111
0010

这就是
~
操作员所做的。你搜索1的补码了吗?位存储在哪里?什么类型的?是的,这很有效。如果你不介意的话,可以解释一下它是如何工作的?@user3259851如果将0替换为2-这样当1被0替换时,你仍然有2要转换为0,你需要中间2,否则在用1替换0后,你将拥有一个包含所有1的字符串!非常感谢。这也起到了作用。这将减少对需求的主要依赖。我认为这没有任何意义。