在Textfile(Java)中解析各种值

时间:2015-11-12 00:42:26

标签: java text-files java.util.scanner

我有一个文本文件:

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

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

我试图做的是,首先,在文件中搜索类型,在这种情况下"电影"或"杂志"。

如果是电影,请将所有值存储在其下方,即 将电影变量设置为2014,制作者为" John"等

如果它是杂志类型,则将所有变量分别存储在它下面。

到目前为止我所拥有的是:

public static void Parse(String inPath) {
        String value;
        try { 
            Scanner sc = new Scanner(new FileInputStream("resources/input.txt"));

            while(sc.hasNextLine()) {
                String line = sc.nextLine();
                if(line.startsWith("type")) {
                    value = line.substring(8-line.length()-1);
                    System.out.println(value);

                }

            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(LibrarySearch.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 

然而,我在打印第一种类型时遇到了一个问题,即#34;电影"。我的程序似乎跳过那个,然后打印出#34; Magazine"代替。

仅针对此问题,是因为行line.startsWith("type")正在检查文件中的当前行是否以type开头,但由于名为line的实际字符串设置为下一行,它会跳过第一个"type"

此外,分别在"Movie""Magazine"类型下分析实际值(等号右侧)的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

我建议你尝试以下方法:

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

String line;

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")) {
            // Make a new object
        } else if (name.equals("year")) {
            // Store in the current object
        }
    } else {
        // It's a new line, so you should make a new object to store stuff in.
    }
}

在你的代码中,子字符串看起来对我很怀疑。如果你根据等号进行拆分,那么它应该更具弹性。