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());
}

07-26 04:20