Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何打印此格式_Java_Stringbuilder_System.out - Fatal编程技术网

Java 如何打印此格式

Java 如何打印此格式,java,stringbuilder,system.out,Java,Stringbuilder,System.out,我想用这种格式打印人员,其中每个人都在一列中,每个人都由空格或制表符分隔,即 约翰·史密斯 男男 01 02 我如何修改我的toString以一个好的格式打印出来?目前,每个字段和每个人都打印在一行中 public class Test { public static void main(String[] args) { ArrayList<Person> persons = new ArrayList<Person>(); persons.add(

我想用这种格式打印人员,其中每个人都在一列中,每个人都由空格或制表符分隔,即

约翰·史密斯 男男 01 02

我如何修改我的toString以一个好的格式打印出来?目前,每个字段和每个人都打印在一行中

public class Test {

public static void main(String[] args) {

    ArrayList<Person> persons = new ArrayList<Person>();

    persons.add(new Person("John", "Male", "01"));
    persons.add(new Person("Smith", "Male", "02"));
    persons.add(new Person("Jack", "Male", "03"));
    persons.add(new Person("Mary", "Female", "04"));
    persons.add(new Person("Alice", "Feamle", "05"));

    for(Person p : persons){
        System.out.print(p + " ");
    }
}

static class Person{

    private String name;
    private String sex;
    private String ID;

    public Person(String n, String s, String id){
        name = n;
        sex = s;
        ID = id;
    }

    public String toString(){

        StringBuilder sb = new StringBuilder();

        sb.append(ID + "\n");
        sb.append(name + "\n");
        sb.append(sex + "\n");

        return sb.toString();
    }
}
}

您不能通过重写toString方法来实现这一点。您必须编写一些stringutil方法,它将获取person列表并构建列表的字符串表示形式并返回它。填充完Person对象后,调用此util方法

要构建字符串,可以使用StringBuilder对象

Util方法将如下所示

StringBuilder sb = new StringBuilder();
for(Person p : persons){
    sb.append(p.getName()+"\t");
}
sb.append("\n")
for(Person p : persons){
    sb.append(p.getSex() + "\t");
}
sb.append("\n")
for(Person p : persons){
    sb.append(p.getID() + "\t");
}

检查String.Format方法。我想这正是你想要的格式,你返回的字符串。这是它的文档

一种基本的方法是:

public class Test {

public static void main(String[] args) {

    ArrayList<Person> persons = new ArrayList<Person>();

    persons.add(new Person("John", "Male", "01"));
    persons.add(new Person("Smith", "Male", "02"));
    persons.add(new Person("Jack", "Male", "03"));
    persons.add(new Person("Mary", "Female", "04"));
    persons.add(new Person("Alice", "Feamle", "05"));

    StringBuilder sb = new StringBuilder();
    for(Person p : persons){
        sb.append(p.getName() + " ");
    }
    sb.append("\n");
    for(Person p : persons){
        sb.append(p.getSex() + " ");
    }
    sb.append("\n");
    for(Person p : persons){
        sb.append(p.getID() + " ");
    }
    sb.append("\n");
    System.out.print(sb.toString());
}

static class Person{

    private String name;
    private String sex;
    private String ID;

    public Person(String n, String s, String id){
        name = n;
        sex = s;
        ID = id;
    }

    public String getName() {
        return name;
    }

    public String getSex() {
        return sex;
    }

    public String getID() {
        return ID;
    }
}
我想应该是:

for(int i = 0; i < Persons.size()){
        System.out.print(Persons.get(i).name + " ");
}

很快就会发现人数是有限的:

public class Test {
    public static void main(String[] args) {

    ArrayList<Person> persons = new ArrayList<Person>();

    persons.add(new Person("John", "Male", "01"));
    persons.add(new Person("Smith", "Male", "02"));
    persons.add(new Person("Jack", "Male", "03"));
    persons.add(new Person("Mary", "Female", "04"));
    persons.add(new Person("Alice", "Feamle", "05"));

    StringBuilder name = new StringBuilder();
    StringBuilder sex = new StringBuilder();
    StringBuilder ID = new StringBuilder();
    String delimeter = "";

   for(Person p : persons){
       name.append(delimeter).append(p.name);
       sex.append(delimeter).append(p.sex);
       ID.append(delimeter).append(p.ID);
       delimeter = "\t";
   }

   System.out.println(name);
   System.out.println(sex);
   System.out.println(ID);
}
输出约翰·史密斯杰克·玛丽·爱丽丝 男男女费姆勒 01 02 03 04 05

另外一个问题可能是名称很长并且破坏了对齐方式。

我建议对Person类使用get方法,以便在遍历每个Person时,可以将Person的每个属性添加到字符串中,然后在以后显示它。像这样:

import java.util.ArrayList;

public class PersonTest {

    public static void main(String[] args) {

        ArrayList<Person> persons = new ArrayList<Person>();

        persons.add(new Person("John", "Male", "01"));
        persons.add(new Person("Smith", "Male", "02"));
        persons.add(new Person("Jack", "Male", "03"));
        persons.add(new Person("Mary", "Female", "04"));
        persons.add(new Person("Alice", "Feamle", "05"));

        // Strings to display at the end of the iterations
        StringBuilder names = new StringBuilder(), sexes = new StringBuilder(), ids = new StringBuilder();

        for(Person p : persons) {
            // tab after each property
            names.append(p.getName() + "\t");
            sexes.append(p.getSex() + "\t");
            ids.append(p.getId() + "\t");
        }

        System.out.println(names);
        System.out.println(sexes);
        System.out.println(ids);
    }

    static class Person {

        private String name;
        private String sex;
        private String ID;

        public Person(String n, String s, String id) {
            name = n;
            sex = s;
            ID = id;
        }

        // getter methods to get the properties of this person
        public String getName() {
            return name;
        }
        public String getSex() {
            return sex;
        }
        public String getId() {
            return ID;
        }
    }
}

如果每一行都要打印出多个对象的属性,那么仅仅通过重载toString方法是无法做到这一点的。请参阅我的更新。谢谢内容在优先级队列中。如何打印该格式?这是可能的,因为其他人都这么做了。我被你的优先级队列弄糊涂了。我的答案有预期的输出吗?你不需要做三组迭代。相反,您可以只使用三个StringBuilder。这是一个非常不完整的答案。
import java.util.ArrayList;

public class PersonTest {

    public static void main(String[] args) {

        ArrayList<Person> persons = new ArrayList<Person>();

        persons.add(new Person("John", "Male", "01"));
        persons.add(new Person("Smith", "Male", "02"));
        persons.add(new Person("Jack", "Male", "03"));
        persons.add(new Person("Mary", "Female", "04"));
        persons.add(new Person("Alice", "Feamle", "05"));

        // Strings to display at the end of the iterations
        StringBuilder names = new StringBuilder(), sexes = new StringBuilder(), ids = new StringBuilder();

        for(Person p : persons) {
            // tab after each property
            names.append(p.getName() + "\t");
            sexes.append(p.getSex() + "\t");
            ids.append(p.getId() + "\t");
        }

        System.out.println(names);
        System.out.println(sexes);
        System.out.println(ids);
    }

    static class Person {

        private String name;
        private String sex;
        private String ID;

        public Person(String n, String s, String id) {
            name = n;
            sex = s;
            ID = id;
        }

        // getter methods to get the properties of this person
        public String getName() {
            return name;
        }
        public String getSex() {
            return sex;
        }
        public String getId() {
            return ID;
        }
    }
}