Java 以所需的方式格式化输出

Java 以所需的方式格式化输出,java,format,report,output,Java,Format,Report,Output,下面的方法生成一个输出。 这段代码唯一的问题是,在报告结束后,它向文件中添加了两行额外的内容,而只需要一行空行。 我尝试过各种组合,但无法继续 有人能帮忙吗 private static void save_player_info(String[][] data, String player) { player=player.toLowerCase(); try { PrintWriter printWriter= new PrintWriter(new File

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

有人能帮忙吗

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();
    }

}
private static void save\u player\u info(字符串[][]数据,字符串播放器){
player=player.toLowerCase();
试一试{
PrintWriter PrintWriter=新的PrintWriter(新文件(“out4.txt”);

对于(int row=1;row而不是无条件地在内部
for
循环之后添加一个空行,如果不是第一次,您应该有条件地在内部
for
循环之前添加一个空行

也应在<代码> Prtff <代码>中使用<换行符>和<代码> PROTLNE()/Script >空白行。并且,应该在代码< >代码>最后> <代码>块,或者使用RealthReals.在这里显示<>代码>最后/<代码>块解决方案,以java版本独立. < /P>

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();
}
PrintWriter PrintWriter=新的PrintWriter(新文件(“out4.txt”);
试一试{
布尔值优先=真;

对于(int row=1;row,您可以在打印换行符的行周围包装一条if语句,以检查
row
是否小于
data.length
。此外,您还可以使用
println()
而不是
print(“\n”)


for(int row=1;row,因为您正在中使用新行

printWriter.printf("%21s : %s\n",fields[i],values[i]);
所以你可以跳过

printWriter.print("\n");

然后在printWriter中只保留一个\n…在for循环之外这将如何解决问题。该函数检查数组中玩家的名称,如果名称匹配,它将在输出文件中写入玩家的统计信息。输出应该是\n用于什么?(玩家1统计信息)空行(玩家2统计信息)空行要在两条记录之间添加额外的行,现在更好的建议是使用“使用资源进行尝试”不要最后使用
。@realpoint是真的,但很多提问的人仍然使用较旧版本的Java,因此没有版本信息,我不想介绍两种方法。由于Java 6从2013年起就不受支持,我认为现在使用Java 7习惯用法是安全的。非常感谢。我被卡住了在这里呆很长时间time@RealSkeptic你可能会想,但我昨天回答了另一个问题,并改为使用try with resource,结果发现这个家伙仍然使用Java 5。我认为重要的部分是
close()
应该始终位于finally块中,无论是手动还是使用try-with-resources。如果最后一行的
if
语句为false,这将无法正常工作。问题不是要求在末尾只打印一行新行吗?@realpoint那么
在最后一次迭代中没有增加吗?我明白了。我想我会编辑回答只是为了避免将来读者混淆:)这应该是输出(玩家1统计)空行(玩家2统计)空行
printWriter.print("\n");