如何将字符串数组转换为我的toString方法的String

问题描述 投票:0回答:2

这是我的toString方法。

public String toString() {
   Life game = new Life(grid);
   String word;
       for (int row = 0; row < grid.length; row++) {
           for (int col = 0; col < grid[0].length; col++) {
               System.out.print("[" + grid[row][col] + "]");  
           }
           System.out.println();
       }
   word = "";
   return word;
}

我想要获得("[" + grid[row][col] + "]");进入我的String字。这是为了创建一个生命网格游戏,我无法弄清楚如何将数组放入字符串表示。

如果所有细胞都死了,它应该是什么样子。 `

[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]
[0][0][0][0][0][0][0][0][0][0]

当我尝试word = word +“[”+ grid [row] [col] +“]”;我明白了......

[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]...

一切都在一条直线上。

java arrays string tostring
2个回答
3
投票

你在这里处理两个问题:

  • 将输出收集到String中 - 这可以使用StringBuilder类完成,并且
  • 在输出字符串中添加换行符 - this Q&A对此进行了解释

最终结果应如下所示:

StringBuilder res = new StringBuilder();
String newline = System.getProperty("line.separator");
for (int row = 0 ; row < grid.length ; row++) {
    for (int col = 0 ; col < grid[row].length ; col++) {
        res.append('[');
        res.append(grid[row][col]);
        res.append(']');
    }
    // Do not append the trailing newline
    if (row != grid.length-1) {
        res.append(newline);
    }
}
return res.toString();

0
投票

考虑使用Java 8的StringJoiner

public String toString() {
    StringJoiner iJoiner = new StringJoiner(System.getProperty("line.separator"));

    for (int i = 0 ; i < grid.length ; i++) {
        StringJoiner jJoiner = new StringJoiner("][", "[", "]");
        for (int j = 0 ; j < grid[i].length ; j++) {
            jJoiner.add("" + grid[i][j]);
        }
        iJoiner.add(jJoiner.toString());
    }
    return iJoiner.toString();
}

StringJoiner在(但不是之前或之后)元素之间放置分隔符,并可选择添加前缀或后缀。

值得一看的是source,它以优雅的方式实现了这一目标。

您也可以使用Collectors.joining()以流为导向的方式执行此操作 - 这是一个围绕Collector实现的简单StringJoiner

 return Arrays.stream(grid)
     .map(row ->
         Arrays.stream(row)
             .mapToObj( x -> ""+x )
             .collect(Collectors.joining("][", "[", "]"))
     .collect(Collectors.joining(lineSeparator));
  • 从输入Stream<int[]>做一个int[][]
  • 使用map()处理每个int[]: 将int[]变成IntStream mapToObjIntStream变成Stream<String>,每行一个单元格的项目 将Stream<String>收集到格式化的行字符串"[1][2][3]"中 因此,map()返回Stream<String>
  • Stream<String>收集到一个换行符分隔的String中
© www.soinside.com 2019 - 2024. All rights reserved.