我尝试使用Java 8读取两个部分之间的特定行。
我需要在~CURVE INFORMATION
和~PARAMETER INFORMATION
我能够通过检查startsWith()
或equals
并使用某些stringbuilder或集合中的行来存储它。但是有没有方法可以在某些部分之间获得一些特定的线。
我正在查看以下问题以供参考。
How to read specific parts of a .txt file in JAVA
How to read specific parts of the text file using Java
来自档案的示例数据:
~WELL INFORMATION
#MNEM.UNIT DATA TYPE INFORMATION
#---------- ------------ ------------------------------
STRT.FT 5560.0000: START DEPTH
STOP.FT 16769.5000: STOP DEPTH
STEP.FT 0.5000: STEP LENGTH
NULL. -999.2500: NULL VALUE
COMP. SHELL: COMPANY
~CURVE INFORMATION
#MNEM.UNIT API CODE CURVE DESCRIPTION
#---------- ------------ ------------------------------
DEPT.F :
SEWP.OHMM 99 000 00 00:
SEMP.OHMM 99 120 00 00:
SEDP.OHMM 99 120 00 00:
SESP.OHMM 99 220 01 00:
SGRC.GAPI 99 310 01 00:
SROP.FT/HR 99 000 00 00:
SBDC.G/C3 45 350 01 00:
SCOR.G/C3 99 365 01 00:
SPSF.DEC 99 890 03 00:
~PARAMETER INFORMATION
#MNEM.UNIT VALUE DESCRIPTION
#---------- ------------ ------------------------------
RMF .OHMM -: RMF
MFST.F -: RMF MEAS. TEMP.
RMC .OHMM -: RMC
MCST.F -: RMC MEAS. TEMP.
MFSS. -: SOURCE RMF.
MCSS. -: SOURCE RMC.
WITN. MILLER: WITNESSED BY
~OTHER INFORMATION
答案 0 :(得分:1)
使用Java9,您可以优雅地使用流
public static void main(String[] args) {
try (Stream<String> stream = Files.lines(Paths.get(args[0]))) {
System.out.println(stream.dropWhile(string -> !"~CURVE INFORMATION".equals(string)).takeWhile( string -> !"~PARAMETER INFORMATION".equals(string)).skip(1).collect(Collectors.joining("\n")));
} catch (IOException e) {
e.printStackTrace();
}
}
令人满意的是流的声明性,你的字面编写代码表示直到开始标记然后删除元素直到结束标记并使用“\ n”连接它们! Java9添加了takeWhile和dropWhile,我相信你可以实现它们或从java 8的库中获取它们的实现。当然这只是实现最初目标的另一种方法。