【问题标题】:How to convert a String Array to a String for my toString method如何将字符串数组转换为我的 toString 方法的字符串
【发布时间】:2017-12-20 16:35:14
【问题描述】:

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


【解决方案1】:

您在这里处理两个问题:

  • 将输出收集到 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();

【讨论】:

  • @RAZ_Muh_Taz 虽然在 OP 的情况下似乎无关紧要,因为他的数组是矩形的,但使用 row 作为索引更安全,以防有人决定复制粘贴此代码并将其用于一个锯齿状的数组。谢谢!
【解决方案2】:

考虑使用 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&lt;int[]&gt;
  • 使用map()处理每个int[]
    • int[] 变成IntStream
    • mapToObjIntStream 转换为 Stream&lt;String&gt;,其中每个单元格对应一个项目
    • Stream&lt;String&gt; 收集到格式化的行字符串"[1][2][3]"
    • map() 因此返回 Stream&lt;String&gt;
  • Stream&lt;String&gt; 收集到一个换行符分隔的字符串中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2021-12-13
    • 2013-12-16
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多