我正在尝试拆分一个遵循以下格式的latex.bib文件:
@ARTICLE{
author={}
date={}
journal={}
}
@ARTICLE{
author={}
date={}
journal={}
}
我正在尝试使用split()来隔离文章,然后检查文章是否有空字段。这是我的代码:
try {
br = new BufferedReader(new FileReader("Latex1.bib"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line =null;
while((line = br.readLine())!=null) {
String [] info = line.split("@ARTICLE");
for(int x=0; x<info.length;x++) {
System.out.println(info[x]);
}
}
我似乎找不到通过知道所有信息都被@ARTICLE {}包围来将文件拆分成文章的方法。有没有办法根据已知的封闭体格式将文件拆分成段?
答案 0 :(得分:0)
以下是没有RegEx
和split()
FileInputStream fis = null;
try
{
fis = new FileInputStream("C:/Users/Pingle/Desktop/Text.txt");
}
catch(Exception e)
{
}
Scanner ob = new Scanner(fis);
ob.useDelimiter("\n");
String str = "";
boolean started = false;
int ArticleNumber = 0;
while(ob.hasNext())
{
String line = ob.next();
if(line.trim().contains("{") && !started)
{
started = true;
ArticleNumber++;
continue;
}
if(line.trim().startsWith("}"))
{
started = false;
System.out.println("Article "+ArticleNumber+" contains:\n"+str);
}
if(started)
{
str += line+"\n";
}
}
当您说Scanner
时,我立即想到了FileInputStream
,但它也适用于FileReader
并进行了一些调整。
另外,我使用的是txt
文件,但它也适用于bib
文件。
因此,扫描程序会获取文件的所有代码,并且每次调用\n
时都会使用next()
的分隔符,这会占用一个新行。
started
检查该行是否被Article
的大括号括起来,并检查该行是否是Article
的内容。
如果started
为false并且该行有{
,则表示str
应该开始存储这些行,started
变为true
。
当该行以}
开头时,started
变为false,并检查另一篇文章。