-4

私のコードは機能していません。テキストファイルは私のクラスと同じフォルダにあります。私はうまくいったパス名を使用しましたが、ファイルを他の人に送るとうまくいかないと思います。また、解析メソッドを使用して文字列をプリミティブ型に変換することもできません。私が間違っていることを確信していない。誰も助けることができますか?ここで'NumberFormatException.forInputString()'を解決するにはどうすればよいですか?

は私のコードです:

import java.util.Scanner; 
import java.util.StringTokenizer; 
import java.io.FileNotFoundException; 
import java.io.FileInputStream; 

public class TestInventory { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Inventory movieList = new Inventory(); 
     Scanner inputStream = null; 
     try{ 
      inputStream = new Scanner(new FileInputStream("movies_db.txt")); 
     } 
     catch(FileNotFoundException e){ 
      System.out.println("File not found or could not be opened"); 
      System.exit(0); 
     } 
     while(inputStream.hasNextLine()){ 
      String s = inputStream.nextLine(); 
      StringTokenizer st = new StringTokenizer(s, " - "); 
      String t1 = st.nextToken(); 
      String t2 = st.nextToken(); 
      String t3 = st.nextToken(); 
      String t4 = st.nextToken(); 
      int y = Integer.parseInt(t2); 
      double r = Double.parseDouble(t4); 
      int d = Integer.parseInt(t3); 
      Movie m = new Movie(t1, y, r, d); 
      movieList.addMovie(m); 
     } 
    } 
} 

そして、これは私が手に出力されます:

run: 
Exception in thread "main" java.lang.NumberFormatException: For input string: "America:" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at TestInventory.main(TestInventory.java:29) 
C:\Users\customer\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 
+3

出力はどのようなものですか? – Subu

+0

実行:スレッドで 例外 "メイン" java.lang.NumberFormatException:入力文字列の場合: "アメリカ:" java.lang.Integerのでjava.lang.NumberFormatException.forInputStringで \t(NumberFormatException.java:65) \t。 \ Users \ユーザー顧客\のAppData \ローカル\:TestInventory.main(TestInventory.java:29) CでのparseInt(Integer.java:580) java.lang.Integer.parseIntで\t(Integer.java:615) \t NetBeans \ Cache \ 8.1 \ executor-snippets \ run.xml:53:Javaが返されました:1 BUILD FAILED(合計時間:0秒) –

+0

@JJoseph 'movies_db.txt'はどのように見えますか? – Arthur

答えて

0

あなたはStringTokenizerクラスに1つの罠に落ちたんだ、二番目のパラメータは以下のように読まれます区切り文字として使用する別個の文字の集合であり、文字列として存在する必要はありません。whole

これは、正確な文字列" - "で分割するのではなく、どこにスペースがあるか、または-で分割されることを意味します。つまり、t2にはおそらくそれが含まれると思われるものが含まれていないことを意味します。各ラインを想定すると

は、それはあなたが意図したよりも多くの部分に文字列を分割していた場合には4つのトークンを、st.hasMoreTokens()がtrueの場合、このチェックするテストすることができ、常に含まれている必要があります。

1

文字列「America:」をparseInt()に解析しているため、エラーメッセージが表示されます。


でdelim引数のすべての文字は、トークンを分離するための区切り文字です。これまで" "または"-"があるたびに、それが分割されます" - "がある場合に代わりのテキストを分割することを意味source

string.split(String regex)を使用する方がよいと思います。これにより、" - "を解析し、文字列配列を返すことができます。

関連する問題