2015-11-12 94 views
0

我有一個簡單的文本文件這樣:簡單的文本文件沒有被正確解析

type = "Movie" 
year = 2014 
Producer = "John" 
title = "The Movie" 

type = "Magazine" 
year = 2013 
Writer = "Alfred" 
title = "The Magazine" 

//而且我想此刻解析,守信用「電影」和「雜誌」,有什麼奇怪的是,我的程序似乎總是跳到「雜誌」,但我的文本文件沒有問題。

public void Parse() throws IOException { 
     try { 
      BufferedReader reader = new BufferedReader(new FileReader(new File("test.txt"))); 

      String line; 
      boolean flag; 
      flag = false; 

      while ((line = reader.readLine()) != null) { 

      if (line.contains("=")) { 
       String[] bits = line.split("="); 
       String name = bits[0].trim(); 
       String value = bits[1].trim(); 

       if (name.equals("type")) { 
        if(value.equals("\"Movie\"")) 
         flag = false; 
        if(value.equals("\"Magazine\"")) 
         flag = true; 
       } 
      } 
      if(flag == true) 
       System.out.println("flag is true"); 
      if(flag == false) 
       System.out.println("Flag is false"); 
      } 
     } catch (FileNotFoundException e) { 

     } 

檢查幾如果代碼即之後的語句,如果flag == true or false,它總是返回true,沒有虛假後。所以出於某種奇怪的原因,我永遠無法解析「電影」一詞,這一行:if(value.equals("\"Movie\""))永遠不會返回真實,我不確定這裏有什麼問題,任何想法都將不勝感激。

+0

你可以嘗試調試IDE中的代碼來弄清楚發生了什麼......或者你可以放一些打印語句來分析每個狀態下變量的值...... –

回答

2

我看到的一個問題是「標誌」是在while循環之外聲明的。另一個是返回類型是無效的,所以我不知道該方法返回true或false。

您正在遍歷整個文件,其中包含電影和雜誌。國旗的最終狀態永遠是真的。

如果將電影放在文件末尾,是否將標誌設置爲false?

+0

這就是問題@OP,試試打印循環內部而不是外部的聲明,看看它是否有效。 –

+1

如果你仔細閱讀他的整篇文章,他表示OP是「遍歷整個文件......標誌的最終狀態永遠是真的。它只打印標誌爲真的唯一原因是因爲它對應於雜誌,標誌不能一次處於兩種狀態。 –