2014-03-25 16 views
1

我想反轉二進制字符串中的位。例如,字符串000應該翻轉爲111和1101爲0010.任何人都可以幫忙嗎?二進制字符串的反轉位java

+1

這就是'〜'符不。你搜索1的補碼嗎? –

+0

位存儲在哪裏?在什麼類型? – stepanian

回答

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

是的,這工作。如果你不介意可以向我解釋它是如何工作的? – user3259851

+0

GOT它。謝謝 – user3259851

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"); 
+0

謝謝。這也工作了。 – user3259851

1

檢查這一點,在這裏輸入intger但你可以輕鬆地將字符串轉換爲INT我希望這不會是艱鉅的任務。

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

這將降低領先的000s –

+0

取決於要求。我認爲領先000不具有任何意義。 –

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" 
1

使用阿帕奇公共朗庫你有一個方便的方法來實現這一目標:基本上

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