Java 二进制字符串的位反转
我想反转二进制字符串中的位。例如,字符串000应反转为111,1101应反转为0010。有人能帮上忙吗?一种方法:使用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.
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的字符串!非常感谢。这也起到了作用。这将减少对需求的主要依赖。我认为这没有任何意义。