二维数组到字符串代码java

时间:2013-11-17 20:20:15

标签: java arrays tostring multidimensional-array

对于我必须编写的程序,我需要将单个数字整数的二维数组转换为由空格分隔的数字串。为我提供了一个测试代码,当我运行它时,我的代码都无法通过arrayToString测试。我无法找到我的逻辑错误。有人帮忙!

public static String arrayToString(int[][] a) {

    String aString;     
    aString = "";
    int column;
    int row;

    for (row = 0; row < a.length; row++) {
        for (column = 0; column < a[0].length; column++ ) {
        aString = aString + " " + a[row][column];
        }
    aString = aString + "\n";
    }

    return aString;
}

4 个答案:

答案 0 :(得分:0)

我可以想到三个可能的问题。

  1. 测试代码不希望看到您在每行开头放置的空间。
  2. 测试代码传递一个数组,其中一些条目为null。您的代码无法解决此问题。
  3. 测试代码传递一个数组,其中条目的长度不同。您的代码也无法应对此问题。
  4. 在发布测试代码之前,我们无法看到问题所在。但是你可以通过改变你的循环来处理这三个问题。

    for (row = 0; row < a.length; row++) {
        if (a[row] != null && a[row].length > 0) {
            aString = aString + a[row][0];
    
            for (column = 1; column < a[row].length; column++) {
                aString = aString + " " + a[row][column];
            }
        }
        aString = aString + "\n";
    }
    

答案 1 :(得分:0)

int[][] a = new int[][]{{1,2,3},{4,5,6},{7,8,9}};

public static String arrayToString(int[][] a) {

    String aString;     
    aString = "";
    int column;
    int row;

    for (row = 0; row < a.length; row++) {
        for (column = 0; column < a[0].length; column++ ) {
        aString = aString + " " + a[row][column];
        }
    aString = aString + "\n";
    }

    return aString;
}

输出:

1 2 3
4 5 6
7 8 9

如果您跳过此行aString = aString + "\n";,您的输出将如下所示

1 2 3 4 5 6 7 8 9

答案 2 :(得分:0)

@ dawood-ibn-kareem解释了测试失败的可能原因。

使用Java 8 Stream,您可以轻松完成所需的操作!

输入:[[1,2,3],[3,4,5],[5,6,7]]

public static String arrayToString(int[][] a) {
    return Arrays.stream(a)
            .map(s -> Arrays.stream(s)
                            .mapToObj(String::valueOf)
                            .collect(Collectors.joining(" "))
            )
            .collect(Collectors.joining("\n"));
}

输出:

1 2 3
3 4 5
5 6 7

其他方法,用于分离2D数组的每一行而不回车

public static String arrayToString(int[][] a) {
    return Arrays.stream(a)
            .flatMapToInt(Arrays::stream)
            .mapToObj(String::valueOf)
            .collect(Collectors.joining(" "));
}

输出

1 2 3 3 4 5 5 6 7

玩得开心!

答案 3 :(得分:-1)

您的代码基本上没问题,除非您在每行的开头放置一个前导空格。要在返回之前清理它们,请添加以下行:

aString = aString.replaceAll("(?m)^ ", "");

这使用正则表达式删除(通过替换为空白)行开头的所有空格。正则表达式标志(?m)使^与输入的每一行的开头匹配(通常^仅匹配输入的开头)。