使用固定宽度的列格式化文本表

use*_*095 1 java file

我有一个包含商店信息的文件,我想将其排序为另一个文件,例如表格(在Excel中)。

文件 :

001     Tablets                        5      3
002     pens                           4      1
005     Computeres                     3      0
003     Bages                          2      1
004     USB                            4      0
Run Code Online (Sandbox Code Playgroud)

我写这段代码:

import java.util.*;
import java.io.*;

public class Sort {
public static void main(String [] args) throws IOException {
    FileInputStream fileinput = new FileInputStream("input.txt");
    FileOutputStream fileoutput = new FileOutputStream("output.txt");
    Scanner infile = new Scanner(fileinput);
    PrintWriter pw = new PrintWriter(fileoutput);
    int id, quantity, soldQuantity;
    String title;
    pw.println("ID\tTitle\t\t\tQuantity\tSoldQuantity");
    pw.println("");
    while(infile.hasNext()){
        id = infile.nextInt();
        title = infile.next();
        quantity = infile.nextInt();
        soldQuantity = infile.nextInt();
        pw.printf("%6d\t%s\t\t%d\t%d%n", id , title, quantity, soldQuantity);
    }
    infile.close();
    pw.close();
}
}
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

Code(ID)    Name            Quantity    SoldQuantity

     001    Tablets                5               3
     002    pens                   4               1
     005    Computeres             3               0
     003    Bages                  2               1
     004    USB                    4               0
Run Code Online (Sandbox Code Playgroud)

我的问题是数量和售出数量不合适。看起来像这样:

Code(ID)    Name            Quantity    SoldQuantity

     001    Tablets             5               3
     002    pens             4               1
     005    Computers             3               0
     003    Bags             2               1
     004    USB             4               0
Run Code Online (Sandbox Code Playgroud)

如果名称比“计算机”大,则名称大小不同时会发生问题,我该如何处理?

谢谢

chr*_*ke- 5

除了使用\t空格,还可以对字符串使用宽度修饰符:

pw.printf("%6d\t%30s%d\t%d%n", id, title, quantity, soldQuantity);
Run Code Online (Sandbox Code Playgroud)

如果您真的想确保所有内容都排成一行,无论最长title的长度有多长,您都可以找到最长的长度,添加一个长度,然后使用该长度将格式字符串粘贴在一起。