2015-11-12 47 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是“遍历整个文件......标志的最终状态永远是真的。它只打印标志为真的唯一原因是因为它对应于杂志,标志不能一次处于两种状态。 –