我有一个文本文件:
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"
类型下分析实际值(等号右侧)的最佳方法是什么?
答案 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.
}
}
在你的代码中,子字符串看起来对我很怀疑。如果你根据等号进行拆分,那么它应该更具弹性。