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

时间:2017-12-20 16:35:14

标签: java arrays string tostring

这是我的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]...

一切都在一条直线上。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

考虑使用Java 8&#39; 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>收集到一个换行符分隔的字符串