Java 如何为我的程序获得正确的输出(字符串格式)?

Java 如何为我的程序获得正确的输出(字符串格式)?,java,printing,string-formatting,Java,Printing,String Formatting,这个问题有点措词不当(我知道),但我不知道我要找的东西的确切名称 我有一个HashMap,我正在打印HashMap的键和值。 所需的输出如下: 我实际上得到的是: 我目前的代码是这样的: System.out.println("\n\nTom Hanks' co-stars are"); costarMovieMap.forEach((k, v)-> System.out.printf("\t%s\t\t\t\t\t\t\t\t in \t\t\t\t\t\t\t%s\n",

这个问题有点措词不当(我知道),但我不知道我要找的东西的确切名称

我有一个HashMap,我正在打印HashMap的键和值。 所需的输出如下:

我实际上得到的是:

我目前的代码是这样的:

System.out.println("\n\nTom Hanks' co-stars are");
    costarMovieMap.forEach((k, v)-> System.out.printf("\t%s\t\t\t\t\t\t\t\t in \t\t\t\t\t\t\t%s\n", k, v));
太可怕了,我说得对吗? 我的猜测是,为了获得所需的输出,我必须指定
%s
从某个行空间或某个地方开始。我不太确定。关于我能做什么有什么想法/建议吗


ps:嗯,有趣的是,我刚刚意识到我在截图上发现了一个bug。汤姆·汉克斯现在不能成为自己的搭档了,是吗:)。

输出字符串时,可以指定宽度作为格式的一部分。这将在字符串中填充空格,直到达到所需的宽度

现在,我不打算计算空间,但它可能是这样的:

System.out.println("\n\nTom Hanks' co-stars are");
    costarMovieMap.forEach((k, v)-> System.out.printf("\t%20s in     %s\n", k, v));

PS有足够的创造性视频编辑,是的,汤姆·汉克斯可以成为他自己的搭档。

你可以这样做,这将打印出与你预期结果相似的内容

costarMovieMap.forEach((k, v)-> System.out.printf("%1$-15s %2$-8s  %s \n", k, "in", v));
可选参数_索引是一个 十进制整数,表示 论点在文章中的位置 参数列表。第一个论点是 由“1$”引用,第二个由 “2美元”等

可选标志是一组 修改输出的字符 总体安排有效标志集取决于 关于转换

可选宽度为十进制整数,表示最小值 要写入的字符数 输出

可选精度为a 非负十进制整数 用于限制 人物。具体行为 取决于转换

所需的转换是 字符,指示参数是如何执行的 应该格式化。有效数据集 给定参数的转换 取决于参数的数据类型

%1$
指第一次替换。在这种情况下,是钥匙。你是说必须有至少15个字符,如果没有,它将被填充


您正在寻找Java格式说明符字符串的
宽度
组件,您可以使用它来代替所有这些
\t
字符。请参阅并查找
格式字符串语法
。照上面说的做,使用
宽度
。哈哈,是的,你是对的,有了足够的创造性视频编辑,很多事情都是可能的。感谢您的解决方案,这几乎就是我所寻找的,尽管第一个单词的宽度为20,这不是正确的输出。但它确实指引了我正确的方向。谢谢,不用担心。别忘了投票并接受这个答案,这样别人也更容易受益。