前提・実現したいこと
ここに質問の内容を詳しく書いてください。
Javaでテキストファイルを読み込んで、CSV形式に変換して書き込むシステムを作っています。
実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.NumberFormatException: For input string: "20210001 男 静大太郎 3.583" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Integer.parseInt(Integer.java:660) at java.base/java.lang.Integer.parseInt(Integer.java:778) at Test6.main(Test6.java:32)
該当のソースコード
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.HashMap; import java.util.Map; import java.io.File; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.FileInputStream; import java.util.Iterator; public class Test6 { public static void main(String[] args) { List<StudentTest6> data = new ArrayList<StudentTest6>(); Map<Integer, StudentTest6> map = new HashMap<>(); try{ File inFile = new File("/Users/shuitakanashi/Documents/二年後期/プログラミング/20211125.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(inFile), "Shift-JIS")); String line; while((line = br.readLine()) != null) { int lines = 0; String[] split = line.split("¥t"); int id = Integer.parseInt(split[0]); String sex = split[1]; String name = split[2]; float gpa = Float.parseFloat(split[3]); StudentTest6 student = new StudentTest6(id, sex, name, gpa); data.add(student); map.put(lines, student); lines++; } } catch(FileNotFoundException e) { System.out.println(e); } catch(IOException e) { System.out.println(e); } catch(NumberFormatException e) { System.out.println(e); } try{ File outFile = new File("/Users/shuitakanashi/Documents/二年後期/プログラミング/Test6.csv"); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(outFile))); //Iterator<Integer> itMapKey = map.keySet().iterator(); Iterator<StudentTest6> itMapValue = map.values().iterator(); //Iterator<Map.Entry<Integer, StudentTest6>> itEntry = map.entrySet().iterator(); while (itMapValue.hasNext()) { StudentTest6 student = itMapValue.next(); pw.write(student.getFirstName() + "さん," + student.getGpa()); System.out.println(student.getFirstName() + "さん," + student.getGpa()); } } catch(IOException e) { System.out.println(e); } } }
試したこと
Integer.parseIntやFloat.parseFloatを使っても解決しませんでした。
補足情報(FW/ツールのバージョンなど)
エラーメッセージを見るとカラム毎の分割が出来ていないようです。
String[] split = line.split("¥t"); の後に
System.out.println(split[0]); 等で意図した値が入っているか確認してはどうでしょうか?