-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: Для ввода строки: "Америка:" \t на java.lang.NumberFormatException.forInputString (NumberFormatException.java:65) \t в java.lang.Integer. ParseInt (Integer.java:580) \t в java.lang.Integer.parseInt (Integer.java:615) \t в TestInventory.main (TestInventory.java:29) C: \ Users \ клиента \ AppData \ Local \ NetBeans \ Cache \ 8.1 \ executor-snippets \ run.xml: 53: Java возвращается: 1 BUILD FAILED (общее время: 0 секунд) –

+0

@JJoseph как выглядит 'movies_db.txt'? – Arthur

ответ

0

Вы попали в одну ловушку с StringTokenizer класса, второй параметр считывается как набор различных символов для использования в качестве разделителя, а не как строка, которая должна присутствовать как whole.

Это означает, что вместо разделения на точную строку " - " она будет разделяться где-либо в пространстве или -. Это означает, что t2, вероятно, не содержит того, что, по вашему мнению, будет содержать.

Предполагая, что каждая строка должна содержать 4 жетона, вы можете проверить это, проверяя, действительно ли st.hasMoreTokens() истинно, и в этом случае он разделил строку на несколько частей, чем вы предполагали.

1

Сообщение об ошибке возникает из-за того, что вы разбираете строку «Америка:» в parseInt().


Все символы в DELIM аргумента разделители для разделения лексем. source

Это означает, что вместо того, разделив текст когда-либо есть " - " она будет разделена, когда есть " " или "-".

Думаю, что вам лучше использовать string.split(String regex). Это позволит вам разобрать " - " и получить массив строк в ответ.