以所需方式格式化输出

Formatting the output in desired way

以下方法产生输出。 这段代码的唯一问题是在报告结束后,它向文件添加了两行额外的行,而只需要一个空行。 我尝试了各种组合,但无法继续。

有人可以帮忙吗?

private static void save_player_info(String[][] data, String player) {
    player=player.toLowerCase();
    try {
        PrintWriter printWriter= new PrintWriter(new File("out4.txt"));
        for(int row=1;row<data.length;row++){
            String playerName=data[row][0].toLowerCase();
            if(playerName.indexOf(player)!=-1){
                String[] fields=data[0];
                String[] values=data[row];
                for (int i=0;i<fields.length;i++){
                    printWriter.printf("%21s : %s\n",fields[i],values[i]);
                }

                printWriter.print("\n");

            }
        }

        printWriter.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

}

}

不是在内部 for 循环之后无条件地添加一个空行,而是应该在内部 for 循环之前有条件地添加一个空行,如果不是第一次的话。

此外,你应该在printf中使用%n作为换行符,println()作为空行。您应该将 close() 放在 finally 块中,或者使用 try-with-resources。在此处显示 finally 块解决方案以实现 Java 版本独立性。

PrintWriter printWriter= new PrintWriter(new File("out4.txt"));
try {
    boolean first = true;
    for(int row=1;row<data.length;row++){
        String playerName=data[row][0].toLowerCase();
        if(playerName.indexOf(player)!=-1){
            String[] fields=data[0];
            String[] values=data[row];
            if (first)
                first = false;
            else
                printWriter.println();
            for (int i=0;i<fields.length;i++){
                printWriter.printf("%21s : %s%n",fields[i],values[i]);
            }
        }
    }
} finally {
    printWriter.close();
}

您可以将 if 语句环绕在打印换行符的行周围,以检查 row 是否小于 data.length。此外,您可以使用 println() 而不是 print("\n")

for(int row=1;row<data.length;row++){
    ...
    if(row < data.length - 1){
        printWriter.println();
    }
}

由于您在

中使用换行符
printWriter.printf("%21s : %s\n",fields[i],values[i]);

所以你可以跳过

printWriter.print("\n");