以所需方式格式化输出
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");
以下方法产生输出。 这段代码的唯一问题是在报告结束后,它向文件添加了两行额外的行,而只需要一个空行。 我尝试了各种组合,但无法继续。
有人可以帮忙吗?
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");