2

我正在 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

4 回答 4

3

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

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

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

String name = "Tim:";
String student = String.format("%1$-10s", name);
System.out.println(student + "A");
于 2013-03-20T17:11:09.970 回答
0

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

于 2013-03-20T17:12:20.443 回答
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());

于 2013-03-20T17:15:22.563 回答
0

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

String.format("%-10s %s", entry.getKey()+":", entry.getValue());
于 2013-03-20T17:22:00.930 回答