2015-02-16 2 views
0

У меня есть 32-битная длинная строка 0 и 1. Я просто хочу, чтобы эта строка была перевернута точно так же, как бинарные биты. То есть, 0s должны быть заменены на 1s и 1 с 0s. я попытался сделать эту замену с этим кодом в Java:Заменить два символа строки друг на друга в Java

String flippedBit = StringUtils.replaceEach(PadChar, 
     new String[]{"0","1"}, new String[]{"1","0"}, false); 

Но я получаю эту ошибку:

The method replaceEach(String, String[], String[]) in the type StringUtils is not applicable for the arguments (String, String[], String[], boolean)

Опять же, я должен хранить эту строку в Integer сначала преобразовать его в 32- бит двоичный.

+1

Итак, почему вы добавляете логическое значение? 'StringUtils' не нравится, когда вы добавляете логическое значение. – Makoto

ответ

2

Я бы итерацию биты некоторого int v и переворачивать их, как

String str = Integer.toBinaryString(v); 
StringBuilder sb = new StringBuilder(); 
for (char ch : str.toCharArray()) { 
    sb.append(ch == '1' ? '0' : '1'); 
} 
return Integer.parseInt(sb.toString(), 2); 
+0

Спасибо, Эллиот, сработало. –

+0

@AtaulHaque: если бы ответ Эллиотта сработал для вас, вы должны отметить его как принятый. –

0

Похоже, это official nuts & bolts tutorial обеспечивает именно то, что вы после:

The unary bitwise complement operator "~" inverts a bit pattern; it can be applied to any of the integral types, making every "0" a "1" and every "1" a "0".

То есть, если предположить, что вы работаете с фактическими битами (в этом случае это спасет вас от конвертации в строку и обратно), а не с String, с которой вы начнете (в этом случае вам будет лучше с ответом @ ElliottFrisch.

+0

Кстати, [этот ответ] (http://stackoverflow.com/a/791340/983430) подробно объясняет, как работает оператор '~'. –

Смежные вопросы