如何为我的 toString 方法将字符串数组转换为字符串
How to convert a String Array to a String for my toString method
这是我的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
class 和 来完成
- 向输出字符串添加换行符 - 这在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();
考虑使用 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()
以面向流的方式执行此操作——这是一个围绕 StringJoiner
:
实现的简单 Collector
return Arrays.stream(grid)
.map(row ->
Arrays.stream(row)
.mapToObj( x -> ""+x )
.collect(Collectors.joining("][", "[", "]"))
.collect(Collectors.joining(lineSeparator));
- 根据输入
int[][]
生成 Stream<int[]>
- 使用
map()
处理每个 int[]
:
- 将
int[]
变成IntStream
mapToObj
将 IntStream
转换为 Stream<String>
,行的每个单元格都有一个项目
- 将
Stream<String>
收集到格式化行字符串"[1][2][3]"
map()
因此 returns 一个 Stream<String>
- 将
Stream<String>
收集到一个换行符分隔的字符串
这是我的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
class 和 来完成
- 向输出字符串添加换行符 - 这在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();
考虑使用 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()
以面向流的方式执行此操作——这是一个围绕 StringJoiner
:
Collector
return Arrays.stream(grid)
.map(row ->
Arrays.stream(row)
.mapToObj( x -> ""+x )
.collect(Collectors.joining("][", "[", "]"))
.collect(Collectors.joining(lineSeparator));
- 根据输入
int[][]
生成 - 使用
map()
处理每个int[]
:- 将
int[]
变成IntStream
mapToObj
将IntStream
转换为Stream<String>
,行的每个单元格都有一个项目- 将
Stream<String>
收集到格式化行字符串"[1][2][3]"
map()
因此 returns 一个Stream<String>
- 将
- 将
Stream<String>
收集到一个换行符分隔的字符串
Stream<int[]>