1

该程序需要具有名称、年龄和身高等标题。在下面,用户将输入需要保持一致的姓名、年龄和身高,就好像它们在不可见的列中一样。例如。

Name------------------Age-----Height

Gus Smith------------22-------5"11

Hank Mathewson---42--------6"1

Frank Dimitrianus---54-------5"6

不是破折号,而是空白。

我已经完成了所有其他事情,我只需要某种命令来让条目自动占用一定的空间。Gus Smith 需要占用 20 个字符的空格,Frank Dimitrianus 需要占用 20 个字符的空格,这样各个时代就会从正确的位置开始,彼此对齐。

谢谢

4

3 回答 3

3

请参阅http://www.homeandlearn.co.uk/java/java_formatted_strings.html

它有(方式)比我能想到的更多的例子。

于 2013-08-24T07:18:07.807 回答
3

String.format可用于分隔填充字段:

String formattedString = String.format("%-20s %-5s %-7s", name, age, height)

假设您将所有字段都作为字符串。-20是列的最小大小,因此如果您的名称超过 20 个字符,您可能需要截断太长的字段或根据最长字段调整名称填充的大小。因此,您可能希望根据最长的字符串构造格式:

String formatForSize(int maxLength) {
  return "%-" + maxLength + "%-5s %-7s";
}

你有一些输出循环:

String format = formatForSize(maxNameSize); //invarient
for (Person person : people ) {
  String personString = String.format(format, person.getName(), person.getAge(), person.getHeight);
  ...
}

最大名称的大小可以来自输入法:但是会读入表格的值。

于 2013-08-24T07:22:31.273 回答
1

String.format()是要走的路。它的第一个参数是格式字符串,它使用格式说明符来指定数据类型和其他标志来控制文本对齐、精度等。

这是一个简单的表实现,可以帮助您入门。

用户等级:

public class User {
    private String name;
    private int age;
    private float height;

    public User(String name, int age, float height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    @Override
    public String toString() {
        return String.format("%-20s | %5d | %5.2f", name, age, height);
    }

    private static String getTableHeader() {
        StringBuilder sb = new StringBuilder(String.format(
                               "%-20s | %5s | %5s", "Name", "Age", "Height"));
        char[] line = new char[sb.length()];
        Arrays.fill(line, '-');
        return sb.append("\n").append(new String(line)).toString();
    }

public static void printUserTable(ArrayList<User> users) {
    System.out.println(getTableHeader());
    for (User user : users) {
        System.out.println(user);
    }
}
}

主程序

public static void main(String[] args) {
    ArrayList<User> users = new ArrayList<User>();

    users.add(new User("Gus Smith", 22, 5.11f));
    users.add(new User("Hank Mathewson", 42, 6.1f));
    users.add(new User("Frank Dimitrianus", 54, 5.6f));

    User.printUserTable(users);
}

输出

Name                 |   Age | Height
-------------------------------------
Gus Smith            |    22 |  5.11
Hank Mathewson       |    42 |  6.10
Frank Dimitrianus    |    54 |  5.60

我想你可以从这里开始。可能应该首先将高度打印为5'11".

于 2013-08-24T07:51:02.823 回答