Java 对一串位的按位not操作

Java 对一串位的按位not操作,java,Java,我有一个值为0111000000的字符串。如何在此字符串上执行按位not操作 如果我将其转换为整数,使用~运算符并将其转换回二进制字符串,则生成的字符串具有额外的位。我希望输出正好是1000111111 下面的代码工作正常,但这不是一个好方法。还有其他更好的方法吗 String bstr=""; while(m!=str.length()) { char a=str.charAt(m); if(a=='1')

我有一个值为0111000000的字符串。如何在此字符串上执行按位not操作

如果我将其转换为整数,使用
~
运算符并将其转换回二进制字符串,则生成的字符串具有额外的位。我希望输出正好是
1000111111

下面的代码工作正常,但这不是一个好方法。还有其他更好的方法吗

   String bstr="";
   while(m!=str.length())
   {             
        char a=str.charAt(m);
        if(a=='1')
        {
             a='0';
             bstr=bstr+a;
             m++;   
        }
        else
        {
             a='1'; 
             bstr=bstr+a;
             m++;
         }
}

跟踪位字符串中有多少位。转换为整数并使用
~值
操作翻转位后,使用位掩码删除不需要的
1
高端位

例如,假设您的位字符串具有固定的10位。然后可以使用:
value&0x2ff
屏蔽不需要的高端位

如果位字符串中的位数是可变的:

value&(1试试这个

    char[] a = s.toCharArray();
    for(int i = 0; i < a.length; i++) {
        a[i] = a[i]=='0' ? '1' : '0';
    }
    s = new String(a);
来自common lang的信息可能有助于:

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

您应该使用字符串生成器,这样您就可以在不创建许多垃圾字符串的情况下更改单个位。您还可以使用XOR翻转单个位:

b ^= 1;
它同时适用于二进制和ASCII数字值。

也许这样可以:

String result = Integer.toBinaryString(~(Integer.parseInt("0111000000",2)));

将二进制字符串转换为int,使用按位not运算符进行反转,然后再转换回二进制字符串。

您可以使用
XOR
操作执行此操作

public String xorOperation(String value) {
    String str1 = value;
    long l = Long.parseLong(str1, 2);
    String str2 = "";
    for (int i = 0; i < str1.length(); i++) {
        str2 = str2 + "1";
    }
    long n = Long.parseLong(str2, 2);
    long num = l ^ n;
    String bininaryString = Long.toBinaryString(num);
    System.out.println(bininaryString);
    return bininaryString;
}
公共字符串xRoperation(字符串值){
字符串str1=值;
longl=long.parseLong(str1,2);
字符串str2=“”;
对于(int i=0;i
很好,但是
a[i]^=1;
更整洁。
&0x3FF
有什么作用?
public String xorOperation(String value) {
    String str1 = value;
    long l = Long.parseLong(str1, 2);
    String str2 = "";
    for (int i = 0; i < str1.length(); i++) {
        str2 = str2 + "1";
    }
    long n = Long.parseLong(str2, 2);
    long num = l ^ n;
    String bininaryString = Long.toBinaryString(num);
    System.out.println(bininaryString);
    return bininaryString;
}