1

我正在使用 Java 将表格格式打印到文本文件中。我有三列和三行。诀窍是让列对齐。找到它们之间的间距的方法是什么?下面的代码不起作用,因为它设置了列之间的间距

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class makeTable {

static ArrayList<String> name = new ArrayList<String>();
static ArrayList<String> model = new ArrayList<String>();
static ArrayList<String> year = new ArrayList<String>();

public static void main(String arg[]) {
    addData();
    BufferedWriter writeTable = null;
    try {
        writeTable = new BufferedWriter(new FileWriter("/home/oveledar/Desktop/table.txt"));
        for (int i = 0; i < name.size(); i++){
            writeTable.write(name.get(i) + "   " + model.get(i) +  "   " + year.get(i));
            writeTable.newLine();
        }
    } catch (IOException e) {
        System.err.println(e);
    } finally {
        if (writeTable != null) {
            try {
                writeTable.close();
            } catch (IOException e) {
                System.err.println(e);
            }
        }
    }
}

public static void addData(){
    name.add("Dodge");
    name.add("BMW");
    name.add("VW");
    model.add("Caravan");
    model.add("323i");
    model.add("Passat");
    year.add("2006");
    year.add("2009");
    year.add("2011");

}

输出

Dodge   Caravan   2006
BMW   323i   2009
VW   Passat   2011

"/t" 不适用于长名称

 Dodge  Caravan 2006
 BMW    323i    2009
 VW     Long model name here    2011
4

3 回答 3

3

尝试使用 String.format() 填充字符串

这个问题应该向您展示它是如何工作的:How can I pad a String in Java?

在写入文件之前,将每个元素填充成等长的字符串。

于 2013-08-20T15:45:08.713 回答
1

如果数据不接近相同的长度,使用制表符不一定会垂直排列列。

更好的解决方案是使用 PrintWriter 类包装 BufferedWriter 并使用 printf 方法。

像这样的东西:

printf("%-20s%-20s%-20s", name.get(i), model.get(i), year.get(i));

“-”左对齐列,20 是列宽。有关格式规范,请参阅 java.util.Formatter javadocs。

于 2013-08-20T21:46:15.843 回答
0

正如您使用换行符\n来创建新行一样,您应该\t在每次控制台写入之后为制表符包含一个转义符,而不是尝试将其与任意空格对齐。

writeTable.write(name.get(i) + "\t" + model.get(i) +  "\t" + year.get(i));
于 2013-08-20T15:47:11.807 回答