0

我想用 OO 实现 2 个报告。报告都像(但有不同的列和数据):

name age gender phone_number
A    10  male   1234
B    20  female 5678
C    30  n/a    9012

如您所见,在报告中,每一列都有自己的标题和解析器(用于解析数据)。我设计了一个对象列:

class Column<T extends Object>
{
    private String header;
    private ColumnParser parser;

    public Column(String header)
    {
        this.header = header;
        this.parser = new ColumnParser<T>()
        {
            public String parse(T t)
            {
                return t.toString();
            }
        }
    }

    public Column(String header, ColumnParser parser)
    {
        this.header = header;
        this.parser = parser;
    }

    public interface ColumnParser<T>
    {
        public String parse(T t);
    }
}

这样每一列都有自己的解析器来解析该列中的数据。但是在这之后,我不知道如何存储数据,以便它们可以映射到每一列并可以被解析。

请指教。

4

1 回答 1

0

首先,了解您的原始数据(在内存中)的格式会很有帮助——例如它是一个 Object[][]?

其次,您需要的输出看起来像是制表符分隔的。那是对的吗?

第三,要写入文本文件,您必须逐行追加。您当前的代码似乎建议您要逐列附加 - 这将更难以实现。

如果您可以将数据转换为 String[][] - 这应该很简单 - 然后您可以使用以下内容写入文件。如果您想要制表符分隔,您可以使用“\t”作为分隔符(虽然,这适用于 Windows - 不确定它是否特定于操作系统,如换行)。

public static void writeToFile(File file, String[][] data, String delimiter){
  PrintWriter out = new PrintWriter(new FileWriter(file));
  for (String[] row : data){
    out.write(makeLine(row, delimiter));
  }
  out.close();
}

private static String makeLine(String[] row, String delimiter) {
  StringBuilder str = new StringBuilder();
  for (String cell : row){
    str.append("\""+cell+"\"").append(delimiter);
  }
  str.deleteCharAt(str.length()-1);
  str.append("\n");
  return str.toString();
}
于 2012-08-24T07:52:11.190 回答