2017-03-09 58 views
1

这个问题有点措辞严谨(我知道),但我不知道我在找什么名字。如何为我的程序(字符串格式)获取正确的输出?

我有一个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:呃有趣我只是意识到我抓到了截图上的一个错误。汤姆汉克斯现在不能成为他自己的联合明星:)。

+1

你正在寻找一个Java格式说明字符串,你可以用它代替所有这些'\ t'字符的*'width' *分量。请参阅https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html并查找“格式字符串语法”。按照'宽度'的意思去做。 – Jameson

回答

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有了足够的创意视频编辑,是的,汤姆·汉克斯可以自己合演。

+0

哈哈,是的,你说得对,有足够多的创意视频编辑是可能的。 感谢您的解决方案,它几乎是我正在寻找的,尽管20的宽度被应用到第一个单词,这不是正确的输出。它确实让我朝着正确的方向。谢谢。 – lokilindo

+0

不用担心。不要忘记加入并接受这个答案,以便让其他人也更容易受益。 –

0

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

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

可选的argument_index是 十进制整数指示在 参数列表中的参数的 位置。第一个参数是 由“$ 1”,第二个由 “2 $”引用,等等

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

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

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

所需的转换为 字符,指示参数 应如何格式化。给定参数 的一组有效 转换取决于参数的数据类型。

%1$指的是第一次置换。在这种情况下,关键。你要说的是,如果没有填充,最少必须有15个字符。

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