【问题标题】:java one dimensional string to multidimensionaljava一维字符串转多维
【发布时间】:2015-04-05 16:19:53
【问题描述】:

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

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 

【问题讨论】:

  • 在 Java 中使用 == 比较两个字符串是不好的,因为两个字符串都需要指向同一个对象才能做到这一点。使用 arrayBin[k][l].equals("1")

标签: java arrays multidimensional-array string-split


【解决方案1】:

您的arrayBin 是一维的。

如果要遍历每个二进制 String 的位,请使用 String 类的 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数组中的每个字符串替换为新的字符串。

【讨论】:

  • 我尝试添加您的代码,它可以编译,但是当我打印出来时,我得到的只是空行,没有实际内容。我不得不将 .equals("1") 部分更改为 "== 1" 因为否则它不会编译(不知道为什么不编译)。我已经编辑了完整的代码并将您的建议添加到我的原始帖子中,在虚线下方。感谢您的帮助。
  • @resu 请注意,在您更新的代码中有两个问题 - == 1 应该是 == '1' 并且您应该分别打印数组的每个字符串(请参阅我的答案中的修改代码)。跨度>
  • 感谢@Eran 的帮助,看到答案后,我觉得我应该完全重新命名这篇文章,因为我认为问题是什么,问题到底是什么,不一样.
猜你喜欢
  • 2021-01-17
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2011-05-06
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多