HY,
我在逐行读取文件时遇到逻辑故障。我知道您可以使用BufferedReader
来做到这一点,但是有时候我有用更多行编写的“值”,这很重要。
我正在读取文件的示例:
<#FIELD NAME = DESC> Some text that goes
over multiple lines
which is needed</#FIELD>
<#FIELD NAME = TEMP> some values are just a single line</#FIELD>
我需要解析字段名称,该字段名称将是上面的TEMP或DESC,然后提取这些括号
<#FIELD NAME =DESC>important values </#FIELD>
之间的值。但是,我不确定使用BufferedReader时如何“识别”条目具有多行值或单值行,然后将其保存到变量中。我将不胜感激任何提示或示例,以指导我朝正确的方向发展!
因为逐行阅读它并没有帮助我进步……我不会发布整个代码,因为我认为有一种更简单的阅读方法,您将了解到目前为止我已经做了什么小片段。
if (line.contains("<#FIELD NAME = AUTOR>"))
{
String autor = line.substring(line.indexOf(">") + 1, line.indexOf("</#"));
metaData.setAutor(autor.trim());
}
else if (line.contains("<#FIELD NAME = DOKUMENTNR>"))
{
String dokumentnr = line.substring(line.indexOf(">") + 1, line.indexOf("</#"));
metaData.setDoukumentnr(dokumentnr.trim());
...
最佳答案
尝试像
public string ReadField(BufferedReader reader)
{
string line = reader.readLine();
while (line.indexOf("</#FIELD>") == -1)
{
line += reader.readLine(); // This does not preserve line breaks
}
return line;
}
在原始代码中,类似
string line = ReadField(myReader); // This reads up to the next field
if(line.contains("<#FIELD NAME = AUTOR>")){
String autor = line.substring(line.indexOf(">")+1,line.indexOf("</#"));
metaData.setAutor(autor.trim());
} else if(line.contains("<#FIELD NAME = DOKUMENTNR>")) {
String dokumentnr = line.substring(line.indexOf(">")+1,line.indexOf("</#"));
metaData.setDoukumentnr(dokumentnr.trim());
}