我有一个csv文件,其中包含14列和5行。我正在读取最后一列的内容,对列值执行一些数学运算,并将其保存在名为 exposureFactor[]
. 现在,我必须在第一列下面按列编写数组,跳过一行,这已经完成得很完美了。但是当我再次运行程序时,它会给我这个错误。
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:662)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at java.base/java.util.stream.ReferencePipeline$4$1.accept(ReferencePipeline.java:212)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:550)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.base/java.util.stream.IntPipeline.toArray(IntPipeline.java:538)
at com.sajood.Readingcsv.appendCol.main(appendCol.java:28)
有人能强调一下这个问题吗。这是一个给我的项目,它的最后期限是在2天。
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
public class appendCol {
public static void main(String[] args) throws IOException {
int sum = 0;
String[] data5;
CSVReader reader5 = new CSVReader(new FileReader("D:\\new.csv"));
String[] nextLine5;
List<String> li = new ArrayList<String>();
while (null != (nextLine5 = reader5.readNext())) {
li.add(nextLine5[nextLine5.length - 1]);
}
String[] tempe = li.toArray(new String[0]);
String[] exp = Arrays.copyOfRange(tempe, 1, tempe.length);
data5 = Arrays.toString(exp).replace("[", "").replace("]", "").replace("\"", "").replace(" ", "").split(",");
int[] weightage = Arrays.stream(data5).mapToInt(Integer::parseInt).toArray();
for (int i = 0; i < weightage.length; i++) {
sum += weightage[i];
}
int average = sum / 6;
String averageStr = String.valueOf(average);
String exposureFactor[] = { "Exposure Factor", averageStr };
FileWriter writer4 = new FileWriter("D:\\new.csv", true);
CSVReader reader3 = new CSVReader(new FileReader("D:\\new.csv"), '\t', '\'', 6);
if ((reader3.readNext()) != null) {
return;
} else {
for (int j = 0; j < exposureFactor.length; j++) {
if (j == 0) {
writer4.append("\n");
}
writer4.append(String.valueOf(exposureFactor[j]));
writer4.append("\n");
}
writer4.close();
}
}
}
1条答案
按热度按时间5sxhfpxr1#
唯一可能的路线是:
int[] weightage = Arrays.stream(data5).mapToInt(Integer::parseInt).toArray();
我想它是想把你的空行解析成数字。为什么在输出曝光系数后需要再次运行它?如果你的老板真的需要连续运行两次,那么快速解决方法就是添加一个try-catch,让它“优雅地”退出
你也可以用这个
if ((reader3.readNext()) != null)
检查你是否想返工。还有一件事:你可能想要
average
当家double
而不是int
.