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

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

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

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

解決済

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

saboro_1028
saboro_1028

総合スコア1

Java

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

1回答

0グッド

0クリップ

218閲覧

投稿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メソッドに問題がありそうです。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

dodox86

2022/12/01 10:26

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

2022/12/01 14:07

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

回答1

0

自己解決

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

投稿2022/12/01 14:08

saboro_1028

総合スコア1

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

YT0014

2022/12/01 15:07

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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