3

私は大学生で、Java のプロジェクトがあり、ファイルから読み取ってコンストラクターに入れようとしています。読み込もうとしているファイルは次の形式です。

2 Sciense [mr ali hassan  14/4/1993 ] Ali  Hhassan 13234 12/3/1998 123 1234567891234 1234567891 engineer
2 Sciense [mr ali hassan  14/4/1993 ] Ali  Hhassan 13234 12/3/1998 123 1234567891234 1234567891 null
.
.
.
etc 

行トークンからトークンをトークンごとに読み取り、それぞれをコンストラクターに入れようとしています。これが私のコードです:

クラスの作成には多くのフローがあることを知っています。それは、約 4 か月前に Java プログラミングを学び始めたばかりだからです。このようにロックするようにコードを強化しようとしました 、 File F= new File ("Book.txt");

       Scanner fileInput = new Scanner (F);
       while (fileInput.hasNextLine()){
       String Line = fileInput.nextLine();      
       Scanner readLline = new Scanner(Line);    

       while(readLline.hasNext()){
       //reads line by line
       readBook.setNumOfAuthor(readLline.nextInt());
       readBook.SetAplicationTitle(fileInput.next(Line));
       String GetRedOf = fileInput.next();    
       ba.setStatus(fileInput.next()); 
       ba.setFirstName(fileInput.next()) ;
       ba.setLastName(fileInput.next());
       Adate.setDay(fileInput.nextInt());
       String GetRedOf3 = fileInput.next();
       Adate.setMonth(fileInput.nextInt());
       String GetRedOf4 = fileInput.next();
       Adate.setYear(fileInput.nextInt() ) ;
      //  String comma = fileInput.next();
       String GetRedOf2= fileInput.next();
       bb.setName(fileInput.next()); 
       bb.setAdress(fileInput.next());
       bb.setphneNumber(fileInput.next());
       publicationDate.setDay(fileInput.nextInt())  ;
       String getred = fileInput.next();
       publicationDate.setMonth(fileInput.nextInt()); 
       String getred1 = fileInput.next();
       publicationDate.setYear(fileInput.nextInt()) ;
       readBook.SetNumOfPUblication(fileInput.nextInt()); 
       readBook.setIsbn13(fileInput.next()) ;  
       readBook.setIsbn13(fileInput.next());  
       readBook.SetCatagory(fileInput.next());            





       }

彼の問題を解決するのを手伝ってくれませんか!

これは、スレッド「メイン」で例外が発生しているエラーです java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:907)

java.util.Scanner.next(Scanner.java:1530)

at java.util.Scanner.next(Scanner.java:1463)

at TestPublications.ReadBook(TestPublications.java:260)

at TestPublications.main(TestPublications.java:232)

Javaの結果:1行260は

readBook.SetAplicationTitle(fileInput.next(Line));

4

4 に答える 4

0

最初の行の場合:

2 Sciense [mr ali hassan  14/4/1993 ] Ali  Hhassan 13234 12/3/1998 123 1234567891234 1234567891 engineer

スキャナーは次のように機能します。

int numofaouthers = fileInput.nextInt(); // 2
String SetAplicationTitle =fileInput.next(); // Sciense 
String GetRedOf = fileInput.next(); // [mr

String Status = fileInput.next(); // ali 

ここはもうダメだ…

于 2014-04-25T15:26:55.263 に答える
0

正規表現を使用して、そこからデータを抽出することをお勧めします。多分このようなもの:

BufferedReader reader = new BufferedReader(new FileReader("input.txt"));

String regex = "([0-9]+) ([a-zA-Z]+) \\[(.+)\\].+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher;

String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
    matcher = pattern.matcher(line);
    if (matcher.find()) {
        System.out.printf("1:%s 2:%s 3:%s", matcher.group(1),
                matcher.group(2), matcher.group(3));
    }
    break;
}

その例は 3 つのグループに一致します。

1:2 2:科学 3:アリ・ハッサン氏 1993 年 4 月 14 日

正規表現を行全体に拡張すると、完了です:-)

于 2014-04-25T15:54:04.353 に答える
0
Sciense [mr ali hassan  14/4/1993 ] Ali  Hhassan are not valid integer.

1.最初に読む文字列

String str = readLline.next();

2. Integer.parseInt() メソッドを使用して整数入力を検証します。

仮定する

try{
    Integer.parseInt(ste);
}
catch(NumberFormatException ex){
    System.out.println("Its not a valid Integer");
}
于 2014-04-25T15:27:26.507 に答える
0

InputMismatchException は、ファイルから読み取られているものが保存しようとしているデータ型と一致しないことを示します。エラーはクラスの 258 行にあります (エディターで行番号をオンにします)。それはあなたのintの1つであると思われます.Stringをintに読み込もうとしているか、intをオーバーフローしています(つまり、読み込んでいる数値がMAX_INTより大きい)。

ちなみに、変数名には小文字の名前を使用する必要があります。あなたの書き方では、クラス名から変数名を判別するのは困難です。

例外の JavaDoc は次のとおりです。

http://docs.oracle.com/javase/7/docs/api/java/util/InputMismatchException.html

于 2014-04-25T15:30:03.973 に答える