这是我的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]...
一切都在一条直线上。
你在这里处理两个问题:
String
中 - 这可以使用StringBuilder
类完成,并且最终结果应如下所示:
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();
考虑使用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
mapToObj
将IntStream
变成Stream<String>
,每行一个单元格的项目
将Stream<String>
收集到格式化的行字符串"[1][2][3]"
中
因此,map()
返回Stream<String>
Stream<String>
收集到一个换行符分隔的String中