Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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_String_Format_Treemap_Spacing - Fatal编程技术网

如何从树映射中格式化Java中的字符串列表,以便以这种方式打印?

如何从树映射中格式化Java中的字符串列表,以便以这种方式打印?,java,string,format,treemap,spacing,Java,String,Format,Treemap,Spacing,我在树形图中列出了一系列的字符串,以便跟踪一群学生的成绩。现在我的程序正在打印字符串列表,如下所示: Jimmy: C+ Tim: A Samantha: B- Mike: A- Jimmy: C+ Tim: A Samantha: B- Mike: A- 当我希望它像这样打印出来时: Jimmy: C+ Tim: A Samantha: B- Mike: A- Jimmy: C+ Tim: A Samantha: B- Mike: A-

我在树形图中列出了一系列的字符串,以便跟踪一群学生的成绩。现在我的程序正在打印字符串列表,如下所示:

Jimmy: C+
Tim: A
Samantha: B-
Mike: A-
Jimmy:    C+
Tim:      A
Samantha: B-
Mike:     A-
当我希望它像这样打印出来时:

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;
//打印所有学生的成绩
案例“P”:System.out.println();
对于(Map.Entry:grades.entrySet())
{
System.out.println(entry.getKey()+“:”+entry.getValue());
}
System.out.println();
打破

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

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


您可以查看使用System.out.format的选项,以及不同的格式选项,如right justifying out等。只需谷歌一下。这里有一个你可以看一下的,你想用左键填充字符串。 看看这个答案:

您可能还需要一个函数来计算要输出的所有名称的最大长度。差不多

private int maxLength(Collection<String> names) {
        int max = 0;
        for (String s : names) {
            if (s.length() > max) {
                max = s.length();
            }
        }
        return max;
    }
private int maxLength(集合名称){
int max=0;
用于(字符串s:名称){
如果(s.长度()>最大值){
最大值=s.长度();
}
}
返回最大值;
}

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

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

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

在System.out.println(..)中使用
\t
??