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

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

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

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

Q&A

解決済

1回答

959閲覧

【Java】CSVの読み込んだ内容を変換する際のエラー

saboro_1028

総合スコア1

Java

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

0グッド

0クリップ

投稿2022/12/01 10:16

前提

ここに質問の内容を詳しく書いてください。

Javaで読み込んだ以下のようなCSVファイルを値を読み込み、その中身を後記法のリストに変換するクラスを作っているのですが、なぜか一番最初の行だけ変換がうまくいきません。

push,1 push,1 push,3 add mul

実現したいこと

  • 以下のようになれば正解ですが...

[1, 1, 3, +, *]

発生している問題・エラーメッセージ

  • なぜか最初の行だけeになってしまいます。

[e, 1, 3, +, *]

該当のソースコード

java

1import java.io.*; 2import java.util.ArrayList; 3import java.util.Objects; 4 5/** 6 * CSVファイルを読み込むクラス 7 */ 8 9public class ImportCSV { 10 11 ArrayList<String> orderList = new ArrayList<>(); 12 13 BufferedReader br = null; 14 public ImportCSV(String filename) throws IOException { 15 File file = new File(filename); 16 br = new BufferedReader(new FileReader(file)); 17 try { 18 // CSVファイルの読み込み 19 String line; 20 while ((line = br.readLine()) != null) { 21 String[] data = line.split(","); 22 Move move = new Move(); 23 System.out.println(data[0]); //1列目は問題なく読み込めています 24 String order = move.move(data[0]); //ここで問題が起きています 25 if (Objects.equals(order, "push")) order = data[1]; //もしdata[0]がpushなら次の列の数字をリストに入れる 26 orderList.add(order); 27 } 28 } catch (IOException e) { 29 System.out.println("ファイル読み込みに失敗"); 30 } 31 } 32} 33 34/** 35*pushの際は数字を返すためにそのまま返して、その他は演算子に変換 36**/ 37class Move{ //これがおかしい? 38 String move(String order){ 39 return switch (order) { 40 case "push" -> "push"; 41 case "add" -> "+"; 42 case "sub" -> "-"; 43 case "mul" -> "*"; 44 case "div" -> "/"; 45 default -> "e"; 46 }; 47 } 48 49} 50

試したこと

Moveクラス(CSVファイルの最初の行をケースにより変換するクラス)のmoveメソッドに問題がありそうです。

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

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

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

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

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

dodox86

2022/12/01 10:26

> なぜか一番最初の行だけ変換がうまくいきません。 CSVファイルを保存したときのエンコーディングがUTF-8で、BOM付きで保存していたりしませんか? BOM無しで保存して再度試してみたらどうでしょう。(BOMとは何か、は、別途調べてみてください)
saboro_1028

2022/12/01 14:07

保存形式がUTF-8になっていました... ありがとうございました。
guest

回答1

0

自己解決

UTF-8形式のCSVで保存していたことが原因でした。

投稿2022/12/01 14:08

saboro_1028

総合スコア1

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

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

YT0014

2022/12/01 15:07

UTF-8でもBOMなしであれば問題ないはずですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問