当我运行程序时,这是输出:
run:
70.3 70.8 73.8 77.0 80.7 83.4 84.5 84.4 83.4 80.2 76.3 72.0
69 67 66 64 66 69 67 67 70 69 69 70BUILD SUCCESSFUL (total time: 0 seconds)
我希望我的程序显示如下,其中数字在垂直和水平方向上以相等的间距对齐:
70.3 70.8 73.8 77.0 80.7 83.4 84.5 84.4 83.4 80.2 76.3 72.0
69 67 66 64 66 69 67 67 70 69 69 70
问题是,我真的不知道如何在一个声明为String的数组上使用printf,该数组包含上面提到的一行数字,这些数字从读取.txt文件中获取这些数字。以下是我的代码片段:
// create token1
String token1 = "";
// create Scanner inFile1
Scanner inFile1 = new Scanner(new File
("/Users/timothylee/KeyWestTemp.txt")).
useDelimiter(",\\s*");
// create temps1
List<String> temps1 = new LinkedList<String>();
// while loop
while(inFile1.hasNext()){
// find next
token1 = inFile1.next();
// initialize temps1
temps1.add(token1);
}
// close inFile1
inFile1.close();
// create array
String[] tempsArray1 = temps1.toArray(new String[0]);
// for-each loop
for(String s : tempsArray1){
// display s
System.out.printf(s + "\n");
}
// create token2
String token2 = "";
// create Scanner inFile2
Scanner inFile2 = new Scanner(new File
("/Users/timothylee/KeyWestHumid.txt")).
useDelimiter(",\\s*");
// create temps2
List<String> temps2 = new LinkedList<String>();
// while loop
while(inFile2.hasNext()){
// find next
token2 = inFile2.next();
// initialize temps2
temps2.add(token2);
}
// close inFile2
inFile2.close();
// create array
String[] tempsArray2 = temps2.toArray(new String[0]);
// for-each loop
for(String ss : tempsArray2){
// display ss
System.out.printf("15s", ss);
}
答案 0 :(得分:1)
考虑到您希望垂直和水平的间距相等,用标签替换空格将不起作用,因为行包含不同长度的值。第二行数据必须知道其“父”数据元素占用了多少空间。因此,仅为格式指定公共width
参数也不起作用。
唯一的例外是,如果您可以保证温度值不会超过99.9或低于10.0,那么您可以假设数据所需的总空间为4 + the amount of spacing you desire
。
无论哪种方式,documentation for Formatter都将提供最佳起点。
假设:
有关如何处理上下文敏感间距的示例,请参阅my implementation。
public static void main (String[] args) throws java.lang.Exception
{
final List<String> temperatures = Arrays.asList("70.3", "700.8", "73.8", "77.0", "80.7", "83.4", "84.5", "84.4", "83.4", "80.2");
final List<String> humidity = Arrays.asList("69", "670", "66", "64", "66", "69", "67", "67", "70", "69");
final Integer[] context = new Integer[temperatures.size()];
final Integer spacing = 2; //declare the spacing you desire
final StringBuilder sb = new StringBuilder();
for(int i =0; i < temperatures.size(); ++i) {
final String str = temperatures.get(i);
final Integer totalSpace = str.length() + spacing;
final String formatted = String.format("%-"+ totalSpace +"s", str);
context[i] = totalSpace;
sb.append(formatted);
}
sb.append("\n");
for(int i =0; i < humidity.size(); ++i) {
final String str = humidity.get(i);
final String formatted = String.format("%-"+ context[i] +"s", str);
sb.append(formatted);
}
System.out.println(sb.toString());
}
<强>结果强>:
Success time: 0.08 memory: 380160 signal:0
70.3 700.8 73.8 77.0 80.7 83.4 84.5 84.4 83.4 80.2
69 670 66 64 66 69 67 67 70 69