我正在编写代码,当两个二进制文件一起添加时返回二进制字符串。
第一步是检查两个二进制字符串的长度是否相同,如果不相同,则在左侧填充“0”;例如:00101 + 011001
应该给000101 + 011001
填充;
我已经为这部分编写了代码。它工作正常,但想知道是否有有效的方法来实现同样的目标。
public class Common{
public static void main(String[] args){
//calling the addBinary will only print the padded binaries correctly
String result=addBinary("00101", "001010");
}
public static String addBinary(String binary1, String binary2){
String result - "";
char[] bin1= binary1.toCharArray();
char[] bin2=binary2.toCharArray();
int[] bin1int=null;
int[] bin2int=null;
System.out.println("---------------before-----------------");
System.out.println(Arrays.toString(bin1));
System.out.println(Arrays.toString(bin2));
System.out.println("-----------------After---------------------");
int bin1_len=bin1.length;
int bin2_len=bin2.length;
if (bin1_len<bin2_len){
bin1int=new int[bin2_len];
bin2int=new int[bin2_len];
int j=bin2_len-bin1_len;
for (char c: binary1.toCharArray()){
bin1int[j]=c-'0';
j++;
}
int k=0;
for (char c: bin2 ){
bin2int[k]=c-'0';
k++;
}
}
System.out.println(Arrays.toString(bin1int));
System.out.println(Arrays.toString(bin2int));
//if (bin2_len<bin1_len)
//reverse implementation of above;
//yet to implement the addition calculation.
return result;
}
}
我对高效填充感兴趣。任何提示/建议?
答案 0 :(得分:2)
只是做:
// Read the binary string to integer and add the two together
int total = Integer.parseInt(binary1, 2) + Integer.parseInt(binary2, 2);
// Convert the resulting integer back to a binary string
String str = new Integer(total).toBinaryString();
如果超过32位,则需要使用Long。
如果你真的想要填充字符串,只需看两个尺寸,然后用较短的一个填充较短的一个长度。
String shorter, String longer;
if (binary1.length() < binary2.length) {
shorter = binary1;
longer = binary2;
} else {
shorter = binary2;
longer = binary1;
}
// Or any of the other multitude of ways to left pad a String.
shorter = org.apache.commons.lang.StringUtils.leftPad(smaller, larger.length(), '0')
答案 1 :(得分:1)
如果您只是想寻找一种有效的填充方法,我认为以下方法会更简单,更有效。
if (bin1_len<bin2_len){
int j=bin2_len-bin1_len;
StringBuilder s = new StringBuilder();
for(int i = 0;i<j;i++){
s.append('0');
}
s.append(binary1); //s now contains the 0 padded binary string
}