如何在Java的toString()方法中打印新行

3

在TestBook.java文件中,我想用System.out.println(b)代替许多system.out.println()行。所以应该在Book类的toString()方法中写什么以返回相同的结果并展现如下:

//Title: xxx
//Author:xxx
//Years:xxx
//Pages:xxx
//edition: xxxx
//==================================

public class Book {

String title;
String author;
int yearOfPublishing;
int numberOfPages;
int eddition;

Book ()
{}

Book ( String title, String author, int yop, int nop, int eddition)
{
    this.title = title;
    this.author = author;
    yearOfPublishing = yop;
    numberOfPages = nop;
    this.eddition = eddition;

}

public String toString()
    {
    // return what?? how can i return new lines
    }
}

public class TestBook {

    public static void main(String[] args) {

        Book b = new Book("Data", "Joe", 2015, 276, 3);

        System.out.println ( "Title : " +b.title);
        System.out.println ( "Author : " +b.author);
        System.out.println ( "Year : " +b.yearOfPublishing);
        System.out.println ( "Pages : " +b.numberOfPages);
        System.out.println ( "Eddition : " +b.eddition);    
        System.out.println ("==================================");

    }
}
4个回答

2

对于其他人,可能在尝试使用Eclipse的源菜单项“生成toString()”时遇到了这个问题。我曾经尝试过以下模板:
${object.className} [\n${member.name()}=${member.value}, ${otherMembers}]

但是,例如会导致以下结果:

@Override
public String toString() {
    return "NEDCustomer [\\nsubscriberType=" + subscriberType + "]";

注意:"\n"被替换为"\n",但显然在输出控制台或日志中并未起作用,因此我会快速搜索和替换以将双反斜杠替换为单个。有了一个新的eclipse工作区,我最终决定再次快速搜索并找出是否有更好的方法来完成它,于是我发现了这个SO问题,不过在找到它之前,我注意到了一个eclipse.org链接,指向toString模板,所以在此问题的答案与我无关时,我回到那个网页,只需编辑模板即可:
${object.className} [
    ${member.name()}=${member.value}, 
    ${otherMembers}]

现在,Eclipse可以正确生成以下内容(为了清晰/格式化,我最终添加了一个制表符):
@Override
public String toString() {
    return "NEDCustomer [\n\tsubscriberType=" + subscriberType + "]";


再次强调,虽然OP手动创建了toString方法,但使用Eclipse的toString模板可以节省大量时间,特别是当你有20个以上的变量时。因此,在某种程度上,这并没有完全回答OP的问题,但可以增强回答或使其更加易懂。

希望这对其他人有所帮助。


这个人懂了。感谢你提供的好答案,为我生成bean的.toString()节省了很多时间 :) - Petro

1
你可以直接在要格式化的数据中返回换行符:
return "Title : " + title + "\nAuthor : " + author ...

请注意,这可能不是解决此问题的最佳方法。

1
  • 如果输出总是在*nix、Windows或Mac OS X之前的操作系统上被消耗,你可以分别使用\n\r\n\r
  • 如果你想让代码跨平台,并且你将在生成数据的同一平台上使用它,你可以使用String.format("%n")System.getProperty("line.separator")System.lineSeparator()

0

这可能是我曾经给出的最短的答案。

谷歌一下:

\n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接