如何从TreeMap格式化Java中的字符串列表以这种方式打印?

时间:2013-03-20 17:09:00

标签: java string format treemap spacing

我正在TreeMap中创建一个字符串列表,以跟踪一群学生的成绩。现在我的程序正在打印这样的字符串列表:

Jimmy: C+
Tim: A
Samantha: B-
Mike: A-

当我希望它打印出来时这样:

Jimmy:    C+
Tim:      A
Samantha: B-
Mike:     A-

如何让名字和成绩像这样间隔?这是我的代码中打印出所有内容的部分:

//Print all students with their grades
case "P": System.out.println();
          for(Map.Entry<String, String> entry : grades.entrySet())
          {
             System.out.println(entry.getKey() + ":  " + entry.getValue());
          }
          System.out.println();
          break;

4 个答案:

答案 0 :(得分:3)

最简单的解决方案可能是在print语句中使用制表符而不是空格。

System.out.println(entry.getKey() + ":\t" + entry.getValue());

另一种方法是使用String format方法用空格右键填充学生的姓名。以下代码将在10个字符宽的列中打印学生的姓名。如果您在打印报告之前知道名称的最大长度(您应该能够轻松找到),这将更加可靠。

String name = "Tim:";
String student = String.format("%1$-10s", name);
System.out.println(student + "A");

答案 1 :(得分:0)

您可以查看使用System.out.format的选项,使用不同的格式选项,例如右对齐等等。只需谷歌这个。这是一个link你看一下

答案 2 :(得分:0)

你想要填充字符串。 看看这个答案:How can I pad a String in Java?

您还可能需要一个函数来计算您尝试输出的所有名称的最大长度。就像是。

private int maxLength(Collection<String> names) {
        int max = 0;
        for (String s : names) {
            if (s.length() > max) {
                max = s.length();
            }
        }
        return max;
    }

然后,像这样使用它:maxLength(grades.keySet());

答案 3 :(得分:0)

将此输入到循环中的System.out.println()

String.format("%-10s %s", entry.getKey()+":", entry.getValue());