【问题标题】:cleanly lining up output干净地排列输出
【发布时间】:2011-08-30 04:25:43
【问题描述】:

我有一个文本文件,其中包含使用 cvs 加密保存的数据,我想在 java 中打开它并完美地显示它。我已经到了从文本文件中读取它的地步,但现在我希望它以逗号分隔,现在我想完全对齐显示它。

 Last, First, car year, car model 
 barry, john, 1956, chevy impala 

我希望它像这样显示:

 last      First   car year    car model 
 barry     john    1956       chevy impala

我只是使用扫描仪类从文本文件中获取数据。

【问题讨论】:

    标签: java excel arraylist text


    【解决方案1】:

    确定列值的最大长度(包括列标题),然后创建一个格式字符串并使用该格式字符串来构建对齐的行:

    // some easy magic first
    String[][] values = getCsvValues(file);
    int[] maxLengths = determineMaxLengths(values);
    
    // create formatstring, something like "%10s %5s %10s %n"
    StringBuilder formatBuilder = new StringBuilder();
    for (int maxLength:maxLengths)
      formatBuilder.append("%").append(maxLength).append("s ");
    formatBuilder.append("%n");   // newline
    
    // output
    for (String[] row:values)
      System.out.printf(formatBuilder.toString, row);
    

    【讨论】:

    • 但程序可以接受任何输入,因此设置条件不太可能。
    • 你认为上面的“设定条件”是什么?
    • 不知道csv数据集有多大。所以 getCsvValues(file) 不起作用。
    • @chuck - 为什么不呢?无论如何,您都必须阅读该文件。否则,您需要知道最大列大小才能进行正确对齐。在不知道实际列宽的情况下进行对齐是完全不可能的。
    • 现在我找到了最大列号,但没有找到行号
    【解决方案2】:

    根据您需要确定的所有排列顺序,您可能需要遍历并找到每列的最长字符串,但我会使用制表符:"\t"。列之间的两个或三个通常对我有用,用于简单的调试,这就是我使用的。

    如果您真的很认真地认为它一直是正确的,请尝试查看 Formatters 和 printf

    【讨论】:

    • 我将如何实现 printf,因为在编码方面我只有 system.out.printf(arraylist.get(i));
    • 看看 Andreas_D 的回答,这是一个很好的方法。
    猜你喜欢
    • 2016-09-18
    • 2012-06-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多