Java String split()包含主体

时间:2018-03-15 17:10:44

标签: java regex string split io

我正在尝试拆分一个遵循以下格式的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 {}包围来将文件拆分成文章的方法。有没有办法根据已知的封闭体格式将文件拆分成段?

1 个答案:

答案 0 :(得分:0)

以下是没有RegExsplit()

的答案
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,并检查另一篇文章。