0

在此处输入图像描述您好我正在尝试使用 NetBeans 将输出与 Java 中的控制台窗口对齐。

ATM 我在数组列表中有一组 MP3Track(类)。在通过控制台对重新排序的列表进行排序后,用户可以按艺术家、专辑和曲目名称等对曲目进行排序:

System.out.println(向量);

我的 MP3Track 类覆盖 toString():

@Override
public String toString(){
    return(String.format("Track No: %-8s Track Title: %-25s Artist Name: %-15s Album Name: %-20s Track Length: %-10s", trackNo , trackTitle, artistName, albumName, trackLength + "\n"));

}

此解决方案适用于除第一行(即 line 且第一个和最后一个数字输出为 [] 之外的所有行)。我希望所有行都对齐并删除开头和结尾的 [] 。我是一年级软件工程专业的学生,​​这是我的第一个 Java 作业,所以请原谅我的经验不足!

我非常感谢这里的一些建议。

提前谢谢了..

4

2 回答 2

2

您正在使用打印矢量

System.out.println(vector);

它调用vector' 的toString()方法来获取它的 String 表示形式,Java 的Collections 的 String 表示形式的格式如下:

[element1.toString(), element2.toString, ... ]

您可以迭代您的向量并打印您MP3Track的 s:

for (MP3Track mp3Track : vector) {
    System.out.println(mp3Track);
}

并删除\nMP3Track 的字符串表示的末尾,这样会更好。

或者,您创建一个类的子Vector类并覆盖其toString()方法并使用它,但这将是过度杀伤imo。

于 2013-11-03T02:13:01.177 回答
0

您不应依赖toString()向最终用户提供数据。toString用于调试目的。大括号在那里是因为数组toString打印了它们。

根据您的说法,当您想向用户呈现数据时,您应该使用外部查看器类,它可以像打印一样打印内容。这个,或者您可以创建一个List委托给 JavaSE 集合并覆盖的实现toString,但我真的不喜欢这种做事方式。

就像是:

public class TrackViewer {
    private static final String FORMAT
            = "Track No: %-8s Track Title: %-25s "
            + "Artist Name: %-15s Album Name: %-20s "
            + "Track Length: %-10s\n";

    private String getTrackLine(Track t) {
        return String.format(FORMAT,
                t.getTrackNo(),
                t.getTrackTitle(),
                t.getArtistName(),
                t.getAlbumName(),
                t.getTrackLength());
    }

    public void listTracks(Iterable<Track> tracks) {
        StringBuilder bdr = new StringBuilder();

        for (Track t : tracks) {
            bdr.append(getTrackLine(t));
        }

        System.out.print(bdr.toString());
    }
}
于 2013-11-03T02:14:32.310 回答