【问题标题】:Printing an Arraylist in toString with lines separating each entry在 toString 中打印一个 Arraylist,用行分隔每个条目
【发布时间】:2016-08-06 03:01:04
【问题描述】:

我有一个 toString 需要打印很多东西,包括一个包含多个条目的 Arraylist。这些条目必须用新行分隔。这是我现在正在使用的 toString 代码:

@Override
public String toString() // Displays the info for a class
    {            
        return getCourseId() + "\n" + getCourseName() + "\n" + getCourseCode()
            + "\n" + "\n" + "Instructor" + "\n" + "-------------------------" 
            + "\n" + Instructor.toString() + "\n" + "\n" + "Student Roster" 
            + "\n" + "-------------------------" + "\n" + roster;
    }

名册确实会打印,但所有条目都存在于同一行,带有括号和逗号。

我的导师坚持 toString 是独立的,所以我目前在 toString 中的所有内容都必须保留在那里。

名册打印如下:

@Override
public String toString() // Displays the info for a person in order
    {
        return getPersonId() + "\t" + getLastName() + "\t" + getFirstName()
            + "\t" + getMajor() + "\t" + getGpa();
    }

目前,我得到如下所示的输出:

10000
College Algebra
MATH 101

Instructor
-------------------------
X00009876   Jones   Jane    Associate Professor Mathematics

Student Roster
-------------------------
[X00000002  Smith   Sally   History         2.98, X00000003 Adams   Amanda     Civil Engineering    3.7, X00000005  Turner  Thomas  Nursing         2.34]

但我希望它看起来像这样:

10000
College Algebra
MATH 101

Instructor
-------------------------
X00009876   Jones   Jane    Associate Professor Mathematics

Student Roster
-------------------------
X00000002   Smith   Sally   History         2.98
X00000003   Adams   Amanda     Civil Engineering    3.7
X00000005   Turner  Thomas  Nursing         2.34

任何建议将不胜感激。谢谢!

【问题讨论】:

  • 所以目前它打印像["something", "something else", "some more"],但你想像"something" "something else" "some more"一样打印它吗? (所以没有方括号,逗号替换为空格?您能否添加当前输出和所需输出的示例以使问题更清晰?
  • 显示它当前的打印方式以及您希望它如何打印。
  • 而不是使用 ArrayList 的 toString() 实现(通过将 roster 添加到字符串),为什么不在第一个 toString() 实现中遍历 roster 并在每个人上调用 toString()学生元素并在每个元素之后打印一个新行
  • 我添加了我当前获得的输出示例和我希望看到的输出示例。我希望这能消除一些困惑。再次感谢!

标签: java arraylist tostring


【解决方案1】:

试试这个:

String rosterStr = roster.stream()
        .map(r -> r.toString())
        .collect(Collectors.joining("\n"))

这将获取名册中每个值的字符串,然后用换行符将它们连接起来

【讨论】:

    【解决方案2】:

    我不确定你到底在问什么,但我建议使用 StringBuilder 类,如下所示:

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
    
        //You haven't provided much info about your ArrayList, customise this accordingly
        for (Object o : ArrayList<Object>) {
            sb.append(o.toString() + " ");
        }
    
        sb.setLength(sb.length() - 1);
    
        return getCourseId() + "\n" + getCourseName() + "\n" + getCourseCode()
            + "\n" + "\n" + "Instructor" + "\n" + "-------------------------"
            + "\n" + Instructor.toString() + "\n" + "\n" + "Student Roster"
            + "\n" + "-------------------------" + "\n" + sb.toString();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-25
      • 2020-11-17
      • 2015-06-10
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多