Java - 根据每行中的第一项将分隔文件拆分为更小的部分

时间:2014-08-19 11:00:48

标签: java csv split

我有一个管道分隔的文件,如下所示:

H||||||
S||||||
S||||||
H||||||
S||||||
H||||||
S||||||
S||||||

我正在尝试将其拆分为较小的部分,其中以H开头的行将指示部件的开头,因此链接以下内容:

H||||||
S||||||
S||||||

H||||||
S||||||

H||||||
S||||||
S||||||

到目前为止我有以下内容将文件拆分并检查每行中的第一项,但我有点不确定如何实现下一位可以传递每个部分(到例如,另一种处理方法。

private static String splitFile(String fileString) throws IOException {

    InputStream is = new ByteArrayInputStream(fileString.getBytes());

    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String line;
    while ((line = br.readLine()) != null) {
        String[] lineArray = line.split("\\|");

        if (lineArray[0].equals("H")) {
            //get rest of this part of the file and forward for processing
        }
    }

    br.close();

    return null;
}

感谢任何帮助或指导。提前谢谢。

3 个答案:

答案 0 :(得分:0)

替换此块

String line;
    while ((line = br.readLine()) != null) {
        String[] lineArray = line.split("\\|");

        if (lineArray[0].equals("H")) {
            //get rest of this part of the file and forward for processing
        }
    }

ArrayList lines= new ArrayList();              // list that holds all lines
String line;
    while ((line = br.readLine()) != null) {
        String[] lineArray = line.split("\\|");

        if (lineArray[0].equals("H")) {
            lines.add("\n");                    // add blank line
        }

         lines.add(line);                       // add each line in list
    }

// Here TODO - pass arraylist for further processing. 

答案 1 :(得分:0)

完全读取文件,然后使用带有Positive Lookahead

的正则表达式模式拆分整个字符串
           (?=\nH)
   new line----^^-------Followed by H

这是online demo

示例代码:

String[] array = wholeString.split("(?=\nH)");

完整的示例代码:

StringBuilder wholeString=new StringBuilder();
String line=null;
while ((line = br.readLine()) != null) {
    wholeString.append(line).append(System.lineSeparator());
}

String[] array = wholeString.toString().split("(?=\nH)");

注意:System.lineSeparator()

  • 在UNIX系统上,它返回"\n"
  • 在Microsoft Windows系统上,它返回"\r\n"

答案 2 :(得分:0)

我的解决方案:

private static String splitFile(String fileString) throws IOException {
    BufferedReader br=new BufferedReader(new StringReader(fileString));
    String line=null;
    StringBuffer cache=null;
    while ((line=br.readLine())!=null)
    {
        if(line.startsWith("H"))
        {
            // new section
            if(cache!=null)
            {
                // process previous block
                String content=cache.toString();
                // do your further processing with the content
                System.out.println(content);
            }
            cache=new StringBuffer(line);
        } else
            cache.append(line);
    }
    br.close();
    return null;
}

一些额外的评论:

  • StringReader将字符串转换为Reader而不通过ByteArray,这可能会导致编码问题。
  • 如果您只需要检查第一个字符,我就不知道为什么要拆分你的线路。
  • cache!=null条件仅在文件开头处为false。