反转二进制字符串java的位

时间:2014-03-25 08:13:11

标签: java binary invert

我想反转二进制字符串中的位。例如,字符串000应该反转为111和1101反转为0010.任何人都可以帮忙吗?

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

单向:正在使用replaceAll()方法:

String s = "01010";

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

System.out.println(s);

<强>输出:

10101

注意:

这可以简化链接调用:

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

答案 2 :(得分:1)

检查一下,这里的输入是整数但你可以很容易地将你的字符串转换为int我希望它不是一项大任务。

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

答案 3 :(得分:1)

你可以做这个技巧来交换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"

答案 4 :(得分:1)

使用 Apache commons-lang 库,你有一个方便的方法来实现这个目标:

StringUtils.replaceChars(mystr, "01", "10");

基本上它用相应的字符替换字符(索引对应)。

这是一个小小的测试程序

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