次のようなサンプルのcsvファイルがあります(参照用のダミーのcsvファイル構造)。
Col0, Col1, Col2, Col3, Col4, Col5
str1, str2, str3, str4, str5, 45.545
str1, str2, str3, str4, str5, 45.545
str1, str2, str3, str4, str5, 45.545
str1, str2, str3, str4, str5, 45.545
str1, str2, str3, str4, str5, 45.545
このcsvファイルをHashMap<String, Double>
、キーがとして生成される場所に読み込もうとしています(Col1 + "|" + Col2 + "|" + Col3 + "|" + Col4 + "|" + Col0) and value as Col5
。
私はここで同様の記事(Java 8ストリームを使用してcsvをマップに変換する方法)に従っていますが、Col5をdoubleに変換するときに次のようにエラーが発生します:
java.lang.NumberFormatException:空の文字列
以下は私が現在使用しているコードです:
private void convertCsvtoMap(final String filePath) {
try {
Stream<String> lines = Files.lines(Paths.get(filePath));
Map<String, Double> resMap = lines.skip(1).map(line -> line.split(",")).collect(
Collectors.toMap(line -> (line[1] + "|" + line[2] + "|" + line[3] + "|" + line[4] + "|" + line[0]), line -> Double.parseDouble(line[5])));
} catch (IOException e) {
e.getLocalizedMessage();
}
}
私はあなたに完全な解決策を与えるつもりはありませんが、ここにこの問題に取り組む方法があります、
手順:
,
区切り文字を使用して行を分割します。コードスニペット:
private void convertCsvtoMap(final String filePath) {
try (Scanner in = new Scanner(new File(filePath))) {
String line = null;
Map<String, Double> resMap = new HashMap<>();
while (in.hasNextLine()) {
line = in.readLine();
String[] fields = line.split(",");
String key = fields[0].trim() + "|" + fields[1].trim() + ...;
double value = Double.parseDouble(fields[5].trim());
resMap.put(key, value);
}
} catch (Exception ex) {
/* Handle Exception */
}
}
注:コードをコンパイルしていないため、構文にいくつか問題がある可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加