我正在使用java中的matrix。 (另一个故事:))
我想读取CSV文件并将其存储在变量中。我将操纵值然后再将其存储在CSV文件中。我使用STRING作为数据类型。但是如果CSV文件有500列。它会杀死我的程序速度:(。我认为这不是很好的数据类型。我可以使用哪种数据类型来临时存储LONG TEXT?
如果我的问题不明确,请提出问题。我会解释。 感谢
P.S:我正在读一行并将其存储在像这样的变量中
String str;
str += read line by line from CSV;
这是循环
String reduceM="";
for(int kk=0;kk<W2.getRowDimension();kk++){
for(int jj=0;jj<W2.getColumnDimension();jj++){
reduceM += Double.toString(reduceMatrix[kk][jj]);
}
System.out.println("\r\n");
}
答案 0 :(得分:6)
使用StringBuilder
(如果您使用的是Java 1.5或更早版本,则使用StringBuffer
):
StringBuilder builder = new StringBuilder();
for (int kk = 0; kk<W2.getRowDimension(); kk++) {
for(int jj = 0; jj < W2.getColumnDimension(); jj++) {
builder.append(reduceMatrix[kk][jj]);
}
}
这将避免它为两个循环的每次迭代创建一个新的(并且越来越长)字符串。
但是,此代码中没有逗号或换行符 - 我怀疑您实际上想要这样的内容:
StringBuilder builder = new StringBuilder();
for (int kk = 0; kk < W2.getRowDimension(); kk++) {
for (int jj = 0; jj < W2.getColumnDimension(); jj++) {
builder.append(reduceMatrix[kk][jj])
.append(",");
}
builder.append("\n"); // Or whatever line terminator you want
}
请注意,这会在每行的末尾留下额外的逗号 - 如果您想了解如何删除它,请告诉我。
请参阅this article了解为什么这可以大大改善您的运行时间。 (请注意,这是一篇旧文章,谈论StringBuffer
而不是StringBuilder
- 后者只是前者的非同步版本。)
答案 1 :(得分:0)
答案 2 :(得分:0)
首选StringBuilder,与字符串连接(+)相比,性能有很大差异。
答案 3 :(得分:0)
除了双向飞碟的好回答;如果没有必要,请不要写入system.out,或者如果要写入控制台使用缓冲区或在循环结束时写入。它会使您的程序变得很麻烦,因为每次在循环中遇到System.out流时都会打开写入刷新并关闭。