【问题标题】:ToString - Formatting (String Builder)ToString - 格式化(字符串生成器)
【发布时间】:2016-05-06 05:00:15
【问题描述】:

问题:如何使我的字符串看起来像这样,而不是使用(字符串生成器)

应该是什么样子:

《刺客信条IV:黑旗》,发布于:2013 年 11 月 29 日

《光之子》,2014 年 5 月 1 日上映

《龙腾世纪:审判》,发布于:2014 年 12 月 18 日

我知道应该使用某种形式的 StringBuilder 但我不知道如何格式化它。由于我的游戏打印为:

我的样子:

[《刺客信条IV:黑旗》,2013年11月29日上映 《光之子》,2014年5月1日上映 《龙腾世纪:审判》,2014 年 12 月 18 日上映]

下面是我的代码片段,其中日期看起来都很好,只是它们没有分成多行

@Override
public String toString() {  
    DateFormat date = new SimpleDateFormat("MMM dd, yyyy");   
       return("\"" + game + "\"" + ", " + "released on: " + date.format(released.getTime()));
 }

【问题讨论】:

  • 您是否在列表中的每个元素上调用 toString?看起来你的 toString() 是正确的,你只需要在每次调用 toString 后添加一个换行符
  • 当它在链表中打印出来时,如果我在最后添加一个新行 (/n),它只会在最后留出空格,因为它们都连接在一起
  • 解决此问题的一种方法是遍历列表,对每个项目调用 System.out.println,即 myList.forEach(System.out::println)

标签: java formatting tostring stringbuilder


【解决方案1】:

问题是您在一个集合上调用 toString,该集合没有在每个元素的 toString 之间添加换行符。

一种解决方案是迭代集合并在每个项目上调用 System.out.println。

另一种解决方案是将 List 转换为流,然后使用流 API 将每个项目映射到其 toString,然后使用 "\n" 作为分隔符收集在一起,例如

myList.stream().map(g -> g.toString()).collect(Collectors.joining("\n"))

【讨论】:

    【解决方案2】:

    由于你没有告诉我toString方法是在哪个类中声明的,我就称它为ClassA

    您在 cmets 中说您正在使用链表来存储 ClassA 对象。因此,我将向您展示如何打印链表中的每个项目:

    StringBuilder builder = new StringBuilder(); // StringBuilder is used to concatenate all the items in the list
    for (ClassA item : theLinkedList) {
        builder.append(item.toString());
        builder.append("\n"); // Here I add the new line
    }
    System.out.println(builder);
    

    如果您使用的是 Java8,您也可以使用 stream 和 `map 来执行此操作,正如 Gene Taylor 的回答中所建议的那样。它更优雅。

    【讨论】:

    • 很糟糕,我可以看到我没有添加名为 GamingList 的类名,但它如何与日期一起使用,
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多