質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

847閲覧

Java NumberFormatException の対処

Daniel1021

総合スコア2

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/01/12 10:55

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
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/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javahack

2022/01/12 11:50

エラーメッセージを見るとカラム毎の分割が出来ていないようです。 String[] split = line.split("¥t"); の後に System.out.println(split[0]); 等で意図した値が入っているか確認してはどうでしょうか?
guest

回答1

0

エラーメッセージに "20210001 男 静大太郎 3.583" とあるので、
入力行がタブではなくスペースで区切られているのではありませんか?

.split("¥t");.split("[ \t]+") にしてみたらどうでしょうか?

追記
.split("¥t"); の ¥ が 0x5c ではなく、UTF-8 の c2 a5、
すなわち Unicode の '\u00a5' になっています。

投稿2022/01/12 15:34

編集2022/01/13 04:07
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問