Java 打印格式

Java 打印格式,java,formatting,output,string-formatting,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

我正在尝试打印两列输出的单词和单词计数。我似乎对格式有问题。这是我的
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);
    }
}
在再次查看我的输出之后,我的问题似乎是第二列跟随第一列中单词的长度。有没有办法设置输出的宽度,使计数不依赖于单词的结尾?

试试这个

System.out.printf("%20s%15d", "123451234512345", 10000);
在您的代码中,这个string2实际上需要是int,而不是string。

试试这个

System.out.printf("%20s%15d", "123451234512345", 10000);
在您的代码中,这个string2实际上需要是int,而不是string。

试试这个

System.out.printf("%20s%15d", "123451234512345", 10000);
在您的代码中,这个string2实际上需要是int,而不是string。

试试这个

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

此外,在代码中,这个string2实际上需要是int,而不是string。

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

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

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

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

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

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

下面是一个例子:

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]);
}
String[]text=newstring[]{“apple”,“the”};
int[]data=newint[]{1234567};
for(int i=0;i
输出为:

apple 123 the 4567 苹果123 4567
显然,如果要粘贴到第一列中的单词宽度超过20个字符,它会将第二列推到那么多字符的上方。

您可能还缺少一个尾随“%n”(回车符),并使第二行的第一个元素运行到第一行的第二个元素中(假设这是在循环中调用的)

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

下面是一个例子:

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]);
}
String[]text=newstring[]{“apple”,“the”};
int[]data=newint[]{1234567};
for(int i=0;i
输出为:

apple 123 the 4567 苹果123 4567
显然,如果要粘贴到第一列中的单词宽度超过20个字符,它会将第二列推到那么多字符的上方。

您可能还缺少一个尾随“%n”(回车符),并使第二行的第一个元素运行到第一行的第二个元素中(假设这是在循环中调用的)

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

下面是一个例子:

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]);
}
String[]text=newstring[]{“apple”,“the”};
int[]data=newint[]{1234567};
for(int i=0;i
输出为:

apple 123 the 4567 苹果123 4567
显然,如果要粘贴到第一列中的单词宽度超过20个字符,它会将第二列推到那么多字符的上方。

您可能还缺少一个尾随“%n”(回车符),并使第二行的第一个元素运行到第一行的第二个元素中(假设这是在循环中调用的)

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

下面是一个例子:

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]);
}
String[]text=newstring[]{“apple”,“the”};
int[]data=newint[]{1234567};
for(int i=0;i
输出为:

apple 123 the 4567 苹果123 4567
很明显,如果要粘贴到第一列中的单词宽度超过20个字符,它会将第二列的字符数推到20个字符以上。

是否有办法固定%20的宽度,以便下一个文本以固定的with开头?您能澄清一下吗?如果希望两个元素之间有固定数量的空格,可以在格式字段中插入所需数量的空格,如下所示:
“%-20s\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。事实上,left元素将位于一个20个字符宽的区域中,并且左对齐(由于“-”)我认为我的代码的问题是,-15开始于它前面打印的单词的末尾。所以如果苹果这个词被打印出来。。然后计数在15个空格后打印出来。在下一行,一个像“the”这样的单词被打印出来,然后数到15个空格。问题是“苹果”这个词比“the”这个词长,所以计数操作系统会移动,而不是一个接一个地排列在一起。如果有意义的话。您编写的格式化字符串应该与您描述的内容相同。如果我猜的话,您可能会将输出发送到一个控制台,其中字体的宽度不是固定的,在这种情况下,输出的格式是正确的,但是由于字体的宽度是可变的,所以输出看起来参差不齐。我已经编辑了我的回复