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

时间:2017-03-09 22:37:13

标签: java printing string-formatting

这个问题有点措辞(我知道),但我不知道我要找的确切名称。

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

desired output :)

我实际得到的是:

actual output :(

我目前的代码是这样的:

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:非常有趣我刚刚意识到我在屏幕截图上发现了一个错误。汤姆汉克斯不能成为他自己的联合主演,现在可以:)。

2 个答案:

答案 0 :(得分:1)

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

现在,我不会计算空格,但它可能看起来像这样:

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

PS有足够的创意视频编辑,是的,汤姆汉克斯可以成为他自己的合作明星。

答案 1 :(得分:0)

你可以这样做,这将打印类似于你预期的结果。

costarMovieMap.forEach((k, v)-> System.out.printf("%1$-15s %2$-8s  %s \n", k, "in", v));
  

可选的argument_index是一个   十进制整数表示   论证的位置   参数列表。第一个论点是   由" 1 $"引用,第二个引用   " 2 $"等

     

可选标志是一组   修改输出的字符   格式。有效标志集取决于   关于转换。

     

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

     

可选的精度是a   通常是非负十进制整数   用来限制数量   字符。具体行为   取决于转换。

     

所需的转换是a   字符指示如何参数   应格式化。这套有效   给定参数的转换   取决于参数的数据类型。

%1$指的是第一个替换。在这种情况下的关键。你要说的是必须至少有15个字符,否则它将被填充。

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html