我有一个管道分隔的文件,如下所示:
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;
}
感谢任何帮助或指导。提前谢谢。
答案 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
示例代码:
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()
"\n"
"\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;
}
一些额外的评论:
cache!=null
条件仅在文件开头处为false。