嘿,
我在逐行读取文件时遇到逻辑问题。我知道你可以用 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());
}
关于java - 在java中读取文件超过一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13490729/