通过将一些行分组为一行来重新格式化复杂的结构化文件

时间:2018-07-10 14:50:55

标签: java file bufferedreader

我有一个以下格式的文件,每个LINEBEGIN和LINEEND正文代表用户的数据。

<FILESTART
    <LINEBEGIN
        VALUE1=aa;
        <VALUE2BEGIN
            VALUE2=bb;
        <VALUE2END
        <VALUE3BEGIN
            VALUE3=cc;
        <VALUE3END
        <VALUE3BEGIN
            VALUE3=dd;
        <VALUE3END
        <VALUE3BEGIN
            VALUE3=ee;
        <VALUE3END
        <TAG1BEGIN
            VALUE4=ff;
            VALUE5=<any>
                            <XML1>
                                <XML2>xx</XML2>
                                <XML3>xx</XML3>
                                <XML4>xx</XML4>
                            </XML1>

                    </any>;
        <TAG1END
        <TAG2BEGIN
            VALUE4=gg;
            VALUE5=<any>
                            <XML11>
                                <XML22>yy</XML22>
                                <XML33>yy</XML33>
                                <XML44>yy</XML44>
                            </XML11>

                    </any>;
        <TAG2END
        ....
    <LINEEND
    <LINESTART
    .
    .
    .


    <LINEEND
    ....




<FILEEND

我的目标是使用JAVA重新格式化以下结构:

LINEBEGIN
VALUE1=aa;
VALUE2=bb;
VALUE3=cc;
VALUE3=dd;
VALUE3=ee;
VALUE4=ff;
VALUE5=<any><XML1><XML2>xx</XML2><XML3>xx</XML3><XML4>xx</XML4></XML1></any>;
VALUE4=gg;
VALUE5=<any><XML11><XML22>yy</XML22><XML33>yy</XML33><XML44>yy</XML44></XML11></any>;
LINEEND
LINEBEGIN
..
LINEEND

我最初使用下面的代码提取信息,但是我被困在格式化VALUE5(主要是我将连接VALUE5之后的任何文本行,直到到达TAGEND行。然后稍后将在以后的阶段解析此xml以提取信息)价值。 )。因为在这里我尝试了BufferedReader,它将逐行处理每一行。 那么有什么想法或提示如何格式化VALUE5行?

    br = new BufferedReader(new FileReader(filename));

    String[] row = null;
    String sCurrentLine;

    while ((sCurrentLine = br.readLine()) != null) {

        boolean new_line = false; 

        if (sCurrentLine.equals("<LINEBEGIN")) {
                System.out.println("=========================================line begin================");

            } else if (sCurrentLine.equals("<LINEEND")) {
                System.out.println("=========================== line end ======================");
            }else{
                 //body
                 sCurrentLine = sCurrentLine.replaceAll("\t", "");
                 if(sCurrentLine.contains("VALUE1=")){
                     System.out.println(sCurrentLine);
                }
                if(sCurrentLine.contains("VALUE2=")){
                     System.out.println(sCurrentLine);
                }
                if(sCurrentLine.contains("VALUE3=")){
                     System.out.println(sCurrentLine);
                }
                if(sCurrentLine.contains("VALUE4=")){
                     System.out.println(sCurrentLine);
                }

                //VALUE5 

            }


    } 

0 个答案:

没有答案