【发布时间】:2015-08-01 11:21:09
【问题描述】:
我有一个格式如下的文件。
.I 1
.T
experimental investigation of the aerodynamics of a
wing in a slipstream . 1989
.A
brenckman,m.
.B
experimental investigation of the aerodynamics of a
wing in a slipstream .
.I 2
.T
simple shear flow past a flat plate in an incompressible fluid of small
viscosity .
.A
ting-yili
.B
some texts...
some more text....
.I 3
...
“.I 1”表示与doc ID1和“.I 2" 表示 doc ID2 对应的文本块的开头。
我需要的是读取“.I 1”和“.I 2”之间的文本并将其保存为单独的文件,如“DOC_ID_1.txt”,然后读取“. I 2" 和 ".I 3" 并将其保存为单独的文件,如“DOC_ID_2.txt”等。 让我们假设 .I # 的数量是未知的。
我已经尝试过了,但无法完成。任何帮助将不胜感激
String inputDocFile="C:\\Dropbox\\Data\\cran.all.1400";
try {
File inputFile = new File(inputDocFile);
FileReader fileReader = new FileReader(inputFile);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line=null;
String outputDocFileSeperatedByID="DOC_ID_";
//Pattern docHeaderPattern = Pattern.compile(".I ", Pattern.MULTILINE | Pattern.COMMENTS);
ArrayList<ArrayList<String>> result = new ArrayList<> ();
int docID =0;
try {
StringBuilder sb = new StringBuilder();
line = bufferedReader.readLine();
while (line != null) {
if (line.startsWith(".I"))
{
result.add(new ArrayList<String>());
result.get(docID).add(".I");
line = bufferedReader.readLine();
while(line != null && !line.startsWith(".I")){
line = bufferedReader.readLine();
}
++docID;
}
else line = bufferedReader.readLine();
}
} finally {
bufferedReader.close();
}
} catch (IOException ex) {
Logger.getLogger(ReadFile.class.getName()).log(Level.SEVERE, null, ex);
}
【问题讨论】:
-
注意:您正在使用老式的方式逐行读取文件。今天,
Files.lines()给你一个Stream<String>。然后,正则表达式将帮助您找到I \d。最后,使用Files.write()以便轻松写入相应的文件。 -
Arnaud Denoyelle 感谢您的提示。
标签: java text split bufferedreader stringbuilder