java一维字符串到多维

时间:2015-04-05 16:19:53

标签: java arrays multidimensional-array string-split

我获得了一个可以表示十六进制值的字符串,并被告知要将其转换为字符串并将其存储在字符串中:

String str = new String("FF E7 C3 E7 FF");
String[] arrayStr = str.split(" ");

然后我需要将每个十六进制值转换为二进制等效值:

String[] arrayBin = new String[arrayStr.length];
for (int i = 0; i < arrayStr.length; i++) {
        arrayBin[i] = Integer.toBinaryString(Integer.parseInt(arrayStr[i],16));
}

这是我迷路的地方。这个二进制字符串在技术上是一维还是二维?基本上,我需要将它转换为二维数组,以便我可以在x和y方向迭代它,执行类似这样的事情:

for (int k = 0; k < arrayBin.length; k++) {
    for (int l = 0; l < arrayBin[k].length; l++) {
        if (arrayBin[k][l] == "1") {
            arrayBin[k][l] = "x";
        } else {
            arrayBin[k][l] = " ";               
        }
    }
}

此时我得到的只是编译器错误,尽管在线有关多维数组的所有文章,但没有搜索给我一些有用的东西。我尝试过这样的事情:

String[][] arrayBin2 = new String[arrayBin.length][]
for (int m = 0; m < arrayBin.length; m++) {
    arrayBin2[m][] = arrayBin[m];
}

但那没用。对于我做错了什么的任何帮助或建议都将不胜感激。


第二次尝试回应@Eran的建议:

public class Challenge3 {
    public static void main(String args[]) {
        String str = new String("FF E7 C3 E7 FF");
        String[] arrayStr = str.split(" ");
        String[] arrayBin = new String[arrayStr.length];
        for (int i = 0; i < arrayStr.length; i++) {
            arrayBin[i] = Integer.toBinaryString(Integer.parseInt(arrayStr[i],16));
        }

        for (int k = 0; k < arrayBin.length; k++) {
            StringBuilder sb = new StringBuilder(arrayBin[k].length());     
            for (int l = 0; l < arrayBin[k].length(); l++) {
                if (arrayBin[k].charAt(l) == 1) {
                    sb.append("x");
                } else {
                    sb.append(" ");            
                }
            }
            arrayBin[k] = sb.toString();
            System.out.println(arrayBin);
        }
    }
}

作为旁注,如果正确完成,代码应打印出以下内容:

xxxxxxxx
xxx  xxx
xx    xx
xxx  xxx
xxxxxxxx 

1 个答案:

答案 0 :(得分:1)

您的arrayBin是1维的。

如果要迭代每个二进制文件String的位,请使用length()类的方法charAt()String

for (int k = 0; k < arrayBin.length; k++) {
    StringBuilder sb = new StringBuilder(arrayBin[k].length());
    for (int l = 0; l < arrayBin[k].length(); l++) {
        if (arrayBin[k].charAt(l) == '1') {
            sb.append ('x');
        } else {
            sb.append (' ');            
        }
    }
    arrayBin[k] = sb.toString();
    System.out.println(arrayBin[k]);
}

输出:

xxxxxxxx
xxx  xxx
xx    xx
xxx  xxx
xxxxxxxx

请注意,您无法更改arrayBin数组中的String实例,因为String是不可变的。你可以做的是构造一个新的String并用新的String替换arrayBin数组中的每个String。