【问题标题】:PrintWriter different from regular printingPrintWriter 与常规打印不同
【发布时间】:2012-11-14 18:11:48
【问题描述】:
String[] strarray = new String[dataLine.size()];
strarray = dataLine.toArray(strarray);
PrintWriter pr = new PrintWriter("test.txt");    
for (int i=0; i<strarray.length; i++)
{
   pr.println(Arrays.toString(strarray));
}
pr.close();

当我为此查看 test.txt 时,与调用相比,它会输出一组我不想要的数据(特别是最后几个)

System.out.println(Arrays.toString(strarray));

知道为什么会发生这种情况以及如何解决这个问题吗?

谢谢!

编辑:

让我举一个更具体的例子。

System.out.println 输出

[1040, 0, 6, 1, 11/12/2012, 3, 0, 0, 1, 12/27/2011, 0, 0]
[1041, 0, 6, 1, 11/13/2012, 3, 0, 0, 1, 12/28/2011, 0, 0]

当 pr.println(Arrays.toString(strarray)) 打印时

[1041, 0, 6, 1, 11/13/2012, 3, 0, 0, 1, 12/28/2011, 0, 0]
[1041, 0, 6, 1, 11/13/2012, 3, 0, 0, 1, 12/28/2011, 0, 0]

和 pr.println(strarray[i]);打印

1041
0
6
1
11/13/2012
3
0
0
1
12/28/2011
0
0

我想要的输出文件是第一个。但是,最后两个没有提供给我。

谢谢!

【问题讨论】:

  • 能够看到输出的差异可能是有益的。
  • 第一个将输出完整的数组,只要数组长,第二个将输出完整的数组一次。

标签: java parsing printwriter


【解决方案1】:

我想你正在寻找

pr.println(strarray[i]);

在你的 for 循环中。

与你的问题无关,你应该改变这个

String[] strarray = new String[dataLine.size()];
strarray = dataLine.toArray(strarray);

String[] strarray = dataLine.toArray(new String[0]);

因为您这样做的方式将首先创建一个所需大小的数组,然后将引用更改为另一个数组,这将使您的第一个数组有资格进行垃圾回收。所以不要创建它,如果你不需要它。

【讨论】:

  • 谢谢,但这并没有给我想要的输出。有没有办法编写 Arrays.toString(strarray) 显示的内容?
  • Arrays.toString(strarray) 将始终包含所有数组元素。如果你只想要第一个元素,写System.out.println(strarray[0]);
  • 如果我想要所有数组元素怎么办..我编辑了原始线程抱歉!
  • 如前所述:'Arrays.toString(strarray); 将始终拥有所有数组元素。'确保您的数组内容同时不会改变。
  • 似乎我犯了一个微不足道的错误,即在 for 循环中重新初始化列表,因此只能获得最后一次迭代。我不知道为什么这花了我这么长时间。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多