如果有必要在Java中添加两个二进制字符串(包括填充)的有效方法?

时间:2013-12-27 00:44:54

标签: java binary char addition

我正在编写代码,当两个二进制文件一起添加时返回二进制字符串。 第一步是检查两个二进制字符串的长度是否相同,如果不相同,则在左侧填充“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;

    }
}

我对高效填充感兴趣。任何提示/建议?

2 个答案:

答案 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
    }