我想反转二进制字符串中的位。例如,字符串000应该反转为111和1101反转为0010.任何人都可以帮忙吗?
答案 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