将二进制String []转换为int [] java

时间:2015-09-27 12:24:33

标签: java

如果我想将二进制String []转换为二进制int [],我在哪一部分犯了错误,因为我得错了结果?

我有这样的二进制字符串数组:{" 010101"," 000011"," 111100"} 我想将它转换为具有相同结果的二进制整数数组:{" 010101"," 000011"," 111100"}

我试过但结果不如我的期望。这是我的代码:

public class StringArr2IntArr {
static int[] sAtoiA;
public static void main(String[] args) {
    String[] str=new String[]{"010101","000011","111100"};
    System.out.println("String arr: ");
    for (String str1 : str) {
        System.out.println("strArr= "+str1);
    }

    sAtoiA = convertStringArraytoIntArray(str);
    System.out.println("sA to iA:");
    for (int iA : sAtoiA) {
        System.out.println("iArr= "+iA);
    }
}

private static int[] convertStringArraytoIntArray(String[] sArr) {
    if (sArr!=null) {
        int[] iArr=new int[sArr.length];
        for (int i = 0; i < sArr.length; i++) {
            iArr[i]=Integer.parseInt(sArr[i]);
        }
        return iArr;
    }
    return null;
  }
}

因为我得到了结果:

String arr: 
strArr= 010101
strArr= 000011
strArr= 111100
sA to iA:
iArr= 10101
iArr= 11
iArr= 111100

结果应该是:

String arr: 
strArr= 010101
strArr= 000011
strArr= 111100
sA to iA:
iArr= 010101
iArr= 000011
iArr= 111100

重点是转换器前后的结果应该相同。 有人可以帮助我吗?

3 个答案:

答案 0 :(得分:3)

通过一些调整, 这会产生你所描述的输出:

public static void main(String[] args) {
    String[] str = new String[]{"010101", "000011", "111100"};
    System.out.println("String arr: ");
    for (String str1 : str) {
        System.out.println("strArr= " + str1);
    }

    sAtoiA = convertStringArraytoIntArray(str);
    System.out.println("sA to iA:");
    for (int iA : sAtoiA) {
        System.out.println("iArr= " + String.format("%6s", Integer.toString(iA, 2)).replaceAll(" ", "0"));
    }
}

private static int[] convertStringArraytoIntArray(String[] sArr) {
    if (sArr != null) {
        int[] iArr = new int[sArr.length];
        for (int i = 0; i < sArr.length; i++) {
            iArr[i] = Integer.parseInt(sArr[i], 2);
        }
        return iArr;
    }
    return null;
}

答案 1 :(得分:0)

问题是你转换一个整数值,这是一个数字,不支持前导0。所以,它会削减它们。如果你想使用这个数字序列,我建议你继续使用你的字符串并在需要时提取数字。

答案 2 :(得分:0)

方法default默认在base10中解析数字。您还可以使用一种方法来指定数字所在的基数:Integer.parseInt。但是,当您这样做时,将其转换回来需要额外的工作,因为当您打印出来时,默认情况下会在base10中表示整数。因此,要将它们转换回来,您需要方法Integer.parseInt(theString, 2)。该方法确实摆脱了前导零,因此表示不会保持不变。您可以通过格式化二进制字符串来解决此问题:

Integer.toBinaryString(theInteger)
相关问题