[英]An error when parsing a string to double in Java
我正在嘗試讀取 csv 文件並將其字符串值轉換為雙精度值。
public void trq() throws IOException, ParseException {
Test4 obj = new Test4();
String path = "transposedData1.csv";
BufferedReader readerBuffer = new BufferedReader(new FileReader(path));
String line;
List<Double> results = new ArrayList<Double>();
while ((line = readerBuffer.readLine()) != null) {
if(!line.contains("NA")) {
ArrayList<String> data_per_class = convertCSVtoArrayList11(line);
List<Double> doubleList = data_per_class.stream()
.map(Double::parseDouble)
.collect(Collectors.toList()); // the error here
// do other things
}
}
}
public static ArrayList<String> convertCSVtoArrayList11(String pathCSV) {
ArrayList<String> result = new ArrayList<String>();
if (pathCSV != null) {
String[] splitData = pathCSV.split("\\s*,\\s*");
for (int i = 0; i < splitData.length; i++) {
if (!(splitData[i] == null) || !(splitData[i].length() == 0)) {
result.add(splitData[i].trim());
}
}
}
return result;
}
CSV 文件如下所示:
1.0 8.0 4.0 6.0
3.0 2.0 1.0 5.0
7.0 1.0 8.0 1.0
1.0 2.0 1.0 4.0
請注意,沒有 header。 該文件以沒有標題的值開頭。 我得到的錯誤是:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""1.0""
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
at Test4.trq(Test4.java:1063) \\ I mentioned that in the code above
你知道如何解決這個問題嗎?
代替
pathCSV.split("\\s*,\\s*");
和
pathCSV.split("\\s+");
這樣數字就按空格分開。 目前,它們被存儲到結果中,帶有額外的"
例如""1.0""
,應該存儲為"1.0"
。
根據您看到的錯誤消息,該數字實際上是用一對引號引起來的,這可能導致調用失敗。
一個快速的解決方法是使用asString = substring(1, asString.length() - 2);
,其中asString
是您要解析為雙精度的字符串。
在返回之前使用result.add(splitData[i].trim(). replaceAll("/"","") )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.