Java 如何打印此格式
我想用这种格式打印人员,其中每个人都在一列中,每个人都由空格或制表符分隔,即 约翰·史密斯 男男 01 02 我如何修改我的toString以一个好的格式打印出来?目前,每个字段和每个人都打印在一行中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(
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;
}
}
}