java一维字符串转多维
java one dimensional string to multidimensional
我得到一个可以表示十六进制值的字符串,并被告知将其转换为十六进制值并将其存储在一个字符串中:
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
你的 arrayBin
是一维的。
如果要遍历每个二进制文件 String
的位,请使用 String
class 的方法 length()
和 charAt()
:
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
是不可变的。您可以做的是构造一个新字符串,并用新字符串替换 arrayBin
数组中的每个字符串。
我得到一个可以表示十六进制值的字符串,并被告知将其转换为十六进制值并将其存储在一个字符串中:
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
你的 arrayBin
是一维的。
如果要遍历每个二进制文件 String
的位,请使用 String
class 的方法 length()
和 charAt()
:
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
是不可变的。您可以做的是构造一个新字符串,并用新字符串替换 arrayBin
数组中的每个字符串。