打印格式

时间:2013-12-06 19:20:34

标签: java formatting output string-formatting

我正在尝试打印单词和字数的两列输出。我似乎遇到格式问题。以下是printf的代码行:

    public void inOrderTraverseTree(Node focusNode){
    if(focusNode != null){
        inOrderTraverseTree(focusNode.lChild);
        //focusNode.visit();
        System.out.printf("%-15s %15d", focusNode.key, focusNode.count);
        inOrderTraverseTree(focusNode.rChild);
    }
}

再次查看我的输出后,似乎我的问题是第二列跟随第一列中单词的长度。有没有办法为输出设置宽度,以便计数不依赖于单词的结尾?

3 个答案:

答案 0 :(得分:2)

试试这个。

System.out.printf("%20s%15d", "123451234512345", 10000);

同样在你的代码中,这个string2实际上需要是int,而不是string。

答案 1 :(得分:1)

您可能还缺少一个尾随的“%n”(回车)并且让第二行的第一个元素进入第一行的第二个元素(假设这是在循环中调用的)。

System.out.printf("%-20s %-15d%n", string1, string2);

否则,就像另一个答案所指出的那样,第二个元素应该是一个整数,而不是一个字符串(至少基于你的格式)。

以下是一个例子:

String[] text = new String[] { "apple", "the" };
int[] data = new int[] { 123, 4567 };
for (int i = 0; i < text.length; i++) {
  System.out.printf("%-20s %-15d%n", text[i], data[i]);
}

输出结果为:

apple                123            
the                  4567

显然,如果你想要插入第一列的单词超过20个字符,它会将第二列推到那么多字符上。

答案 2 :(得分:0)

实际上,只要您提供一个数字作为第二个参数,模式“%-20s%-15d”就可以了。我想知道你是如何得到这个输出的,因为为“%-15d”提供一个字符串会产生运行时错误。