簡體   English   中英

使用掃描儀分析文件中的輸入。 JAVA

[英]Parsing input from a file using Scanner. JAVA

我是java的新手,並且正在創建一個文件目錄,該目錄存儲電影和有關電影的信息。 電影和信息存儲在這樣的文件中:

Movie Title 
Rating Year Reviews Month Day Year

第一行的標題,第二行的其他信息。 因此,對於多部電影,它看起來像這樣:

Movie Title
Rating Year Reviews Month Day Year
Movie Title
Rating Year Reviews Month Day Year
Movie Title
Rating Year Reviews Month Day Year

...等等。 我有一種將影片打印到控制台的方法,但是我遇到了正確格式化影片的問題。 電影信息應采用以下格式:

   Star Wars     PG    1977   5 stars  1/5/2018

每列應正確對齊。 標題,等級和年份應保持對齊; 星號和日期正確對齊。

第一次它完全按照我想要的方式打印電影信息,但是當我添加多部電影時,事情就變得混亂了。 這是我的代碼,我相信問題出在listMovies方法中,我嘗試格式化輸出,但是我包括了所有代碼,以防其他地方發生混亂。

public class Directory 
{
   private static final String dir = "data/cs2410-directory.data";
   String mTitle,mRat,mRel,mRev,mM,mD,mY;

public Directory()
{
    mTitle = "Movie Title";
    mRat = "Rating";
    mRel = "Year";
    mRev = "Reviews";
    mM = "Month";
    mD = "Day";
    mY ="Year";
    insertMovie();
    listMovies();
}


private void insertMovie()
{
    PrintWriter dirIn = null;

    try
    {
        dirIn = new PrintWriter(new FileOutputStream(dir,true));
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
    dirIn.println(mTitle);
    dirIn.println(mRat+" "+mRel+" "+mRev+" "+mM+" "+mD+" "+mY);
    dirIn.close();
    System.out.print("The following movie has been added to the directory:\n");
    System.out.print(mTitle+" ("+mRel+") "+mRat+"\n");
    System.out.print("Stars: "+mRev+"\n");
    System.out.print("Last Watched: "+mM+"/"+mD+"/"+mY+"\n");
}

private void listMovies()
{
    Scanner dirOut = null;

    try
    {
        dirOut = new Scanner(new FileReader(dir));
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
    while (dirOut.hasNext()) //PROBLEM
    {
        System.out.printf("%-15s%-10s%-10s%5s%10s/%s/%s\n", dirOut.nextLine(),dirOut.next()
                ,dirOut.next(),dirOut.next(),dirOut.next(),dirOut.next(),dirOut.next());
    }
    dirOut.close();
}

public static void main(String[] args)
{
    new Directory();
}

這是一部電影(一次運行程序)后的輸出,應該是這樣的樣子:

The following movie has been added to the directory:
Movie Title (Year) Rating
Stars: Reviews
Last Watched: Month/Day/Year
Movie Title    Rating    Year      Reviews     Month/Day/Year

這是運行兩次之后的結果:

The following movie has been added to the directory:
Movie Title (Year) Rating
Stars: Reviews
Last Watched: Month/Day/Year
Movie Title    Rating    Year      Reviews     Month/Day/Year
               Movie     Exception in thread "main" java.util.NoSuchElementException
Title     Rating      Year/Reviews/Month
    at java.base/java.util.Scanner.throwFor(Scanner.java:858)
    at java.base/java.util.Scanner.next(Scanner.java:1381)
    at cs2410.assn3.directory.Directory.listMovies(Directory.java:71)
    at cs2410.assn3.directory.Directory.<init>(Directory.java:32)
    at cs2410.assn3.directory.Directory.main(Directory.java:79)

這是運行5次后的結果:

The following movie has been added to the directory:
Movie Title (Year) Rating
Stars: Reviews
Last Watched: Month/Day/Year
Movie Title    Rating    Year      Reviews     Month/Day/Year
               Movie     Title     Rating      Year/Reviews/Month
 Day Year      Movie     Title     Rating      Year/Reviews/Month
 Day Year      Movie     Title     Rating      Year/Reviews/Month
 Day Year      Movie     Title     Rating      Year/Reviews/Month
 Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:858)
    at java.base/java.util.Scanner.next(Scanner.java:1381)
    at cs2410.assn3.directory.Directory.listMovies(Directory.java:71)
    at cs2410.assn3.directory.Directory.<init>(Directory.java:32)
    at cs2410.assn3.directory.Directory.main(Directory.java:79)

如果我正確理解了該問題,則解決方案非常簡單:在dirOut.hasNext()循環中的System.out.printf()下面添加以下行。

dirOut.nextLine();

您的輸入模式有兩行; 這個額外的nextLine()可以正確地瀏覽文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM