2016-08-16 4 views
0

テキストファイルをスキャンして、テキストファイル内の個々の行をスキャンしてオブジェクトを作成しようとすると、以下のエラーが発生します。 これをどのように修正することができますか?スキャナ内のスキャナエラー

Error: java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1371) at MyZoo.readDataFromFile(MyZoo.java:111)

while(scanner.hasNextLine()){ 
    lineOfInput = scanner.nextLine(); 
    if(lineOfInput.startsWith("#")){ 

    } else { 
     String animalType, species, name; 
     Scanner newScanner = new Scanner(lineOfInput).useDelimiter("\\s*,\\s*"); 

     animalType = newScanner.next(); 
     System.out.println(animalType); 
     species = newScanner.next(); 
     name  = newScanner.nextLine(); 
    } 
+0

読み上げようとしているコンテンツは何ですか? – Sanjeev

+0

これは、データの行を含むテキストファイルです。私は最初のスキャナを使ってその行を読みます。次に、読み込まれた行の各単語をスキャンして変数として割り当てます。私は最初の3つをスキャンした後、動物特有のクラスの残りのデータを読み取るようにします –

+0

なぜ別のスキャナーを使いたいのですか?あなたは既に 'split()'のような 'String'関数を使用しています... – brso05

答えて

1

あなたはコメント

に言ったように「それはデータの行を含むテキストファイルですが、私は最初のスキャナを使って行を読み込み、読み込んだ行の各単語を変数として割り当てようとします。最初の3つをスキャンした後、動物固有のクラスの残りのデータを読みたい"

2番目のスキャナで間違った区切り文字が使用されるため、その例外が発生しています。

試してみてください。

Scanner newScanner = new Scanner(lineOfInput).useDelimiter("\\W"); 

は、この情報がお役に立てば幸いです。

+0

ありがとう、これは私のために働いた! –

+0

あなたを助けてくれてうれしいよ:) – Sanjeev

2

私はあなたがこのような方法でこれを行うことができると思います。

while (scanner.hasNextLine()) { 
    lineOfInput = scanner.nextLine(); 
    if (lineOfInput.startsWith("#")) { 

    } else { 
     String animalType, species, name; 

     String s[] = lineOfInput.split(" "); 
     animalType = s[0]; 
     species = s[1]; 
     name = s[2]; 
    } 

} 
+0

java.lang.ArrayIndexOutOfBoundsException:2 \t at MyZoo.readDataFromFile(MyZoo.java:110)。そのようにすればエラーが出る –

+0

各行に3つの文字列animalType、species、およびnameが含まれていますか? – Shahid