2
 import java.io.*;
    import java.util.*;

    public class Readfilm {

    public static void main(String[] args) throws IOException {

        ArrayList films = new ArrayList();
        File file = new File("filmList.txt");
        try {
            Scanner scanner = new Scanner(file);

            while (scanner.hasNext())
            {
                String filmName = scanner.next();
                System.out.println(filmName);
            }
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
    }}

上記は私が現在使用しようとしているコードです、それはうまくコンパイルされます、そして私は次のランタイムエラーを受け取ります:

java.util.NoSuchElementException  
    at java.util.Scanner.throwFor(Scanner.java:907)  
    at java.util.Scanner.next(Scanner.java:1416)  
    at Readfilm.main(Readfilm.java:15)  

私はエラーをグーグルで検索しましたが、何も役に立ちませんでした(エラーの最初の3行だけをグーグルで検索しました)

基本的に、私が書いているプログラムは、より大きなプログラムの一部です。この部分は、次のように記述されたテキストファイルから情報を取得するためのものです。

フィルム1/1.5
フィルム2/1.3
フィルム3/2.1
フィルム4/4.0

テキストは映画のタイトルで、フロートは映画の長さです(20分が追加され(広告の場合)、最も近い整数に切り上げられます)

次に、プログラムは情報を配列に入れて、プログラムから簡単にアクセスおよび変更して、ファイルに書き戻すことができるようにします。

私の問題は次のとおりです。

現在、実行時エラーが発生しますが、修正方法の手がかりはありませんか?(現時点では、各行を読み取って、プログラムの残りの部分のベースとして配列に格納しようとしています)誰かが私を正しい方向に向けることができますか?

「/」で分割する方法がわかりません。.split( "/")のようなものだと思いますか?

どんな助けでも大歓迎です!

ザック。

4

3 に答える 3

1

コードは機能していますが、1行しか読み取れません。ここでbufferedReaderを使用できます。例を示します。

import java.io.*;
class FileRead 
{
 public static void main(String args[])
  {
  try{
  // Open the file that is the first 
  // command line parameter
  FileInputStream fstream = new FileInputStream("textfile.txt");
  // Get the object of DataInputStream
  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine;
  //Read File Line By Line
  while ((strLine = br.readLine()) != null)   {
  // Print the content on the console
  System.out.println (strLine);
  }
  //Close the input stream
  in.close();
    }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }
  }
}

そしてここに分割例があります

class StringSplitExample {
        public static void main(String[] args) {
                String st = "Hello_World";
                String str[] = st.split("_");
                for (int i = 0; i < str.length; i++) {
                        System.out.println(str[i]);
                }
        }
}

于 2012-04-06T07:18:08.713 に答える
1

トークン化のための、は使用しませんScanner(一度に1つの単語または記号を取得します)。おそらく、メソッドBufferedReaderを持つaを使用し、提案どおりに使用して2つの部分に分割することをお勧めします。readLineline.split("/")

于 2012-04-06T07:20:29.540 に答える
0

怠惰な解決策:

スキャナースキャン=..;
scan.nextLine();

于 2012-04-06T12:08:14.830 に答える