Java printf格式化以打印表或列中的项目

我想用printf打印整齐的列。

happening 0.083333 [4] hi 0.083333 [0] if 0.083333 [8] important 0.083333 [7] is 0.250000 [3, 5, 10] it 0.166667 [6, 9] tagged 0.083333 [11] there 0.083333 [1] what 0.083333 [2] 

我有这个代码System.out.printf("%s %.6f %s \n", word, web.getFrequency(word), loc); ,但它打印出来:

 happening 0.083333 [ 4 ] hi 0.083333 [ 0 ] if 0.083333 [ 8 ] important 0.083333 [ 7 ] is 0.250000 [ 3 5 10 ] it 0.166667 [ 6 9 ] tagged 0.083333 [ 11 ] there 0.083333 [ 1 ] what 0.083333 [ 2 ] 

任何帮助,将不胜感激。

我会用这个:

 System.out.printf ("%-30s %1.7f %s%n", word, etc, etc2); 

您可以获取所有单词字符串的最大长度,并将该长度存储在变量max 。 使用for循环获取max ,然后创建一个String ,其格式为连接普通printf格式和max变量以用作宽度。 另外\t输入制表符。

 int max = 0; for (int ii = 0; ii < numberOfStrings; ii++) { max = (word.length() > max) ? word.length() : max; } String format = "%" + max + "s\t%.6f\t%s \n"; System.out.printf(format, word, web.getFrequency(word), loc); 
 System.out.format("%-8s%-8s%-8s\n","a","b","pow(b,a)"); System.out.format("%-8d%-8d%-8d\n",1,2,1); System.out.format("%-8d%-8d%-8d\n",2,3,8); System.out.format("%-8d%-8d%-8d\n",3,4,81); System.out.format("%-8d%-8d%-8d\n",4,5,1024); System.out.format("%-8d%-8d%-8d\n",5,6,15625); //the negative integer kinda sets it back to the number of space needed 

输入:

 happening 0.083333 [4] hi 0.083333 [0] if 0.083333 [8] important 0.083333 [7] is 0.250000 [3, 5, 10] it 0.166667 [6, 9] tagged 0.083333 [11] there 0.083333 [1] what 0.083333 [2] 

码:

 import java.util.Scanner; public class MyClass { private static final Scanner sc = new Scanner(System.in); public static void main(String args[]) { for(int i = 0 ; i < 9; i++){ String str = sc.next(); float f = sc.nextFloat(); String str2 = sc.nextLine(); System.out.printf("%-10s %f %s\n", str, f, str2); } sc.close(); } } 

输出:

 happening 0.083333 [4] hi 0.083333 [0] if 0.083333 [8] important 0.083333 [7] is 0.250000 [3, 5, 10] it 0.166667 [6, 9] tagged 0.083333 [11] there 0.083333 [1] what 0.083333 [2] 

use - 使字符串左对齐,使用字段宽度正确对齐它们。 在你的情况下,printf语句将是

 System.out.printf("%-10s %.6f %s\n", word, web.getFrequency(word), loc);