我有一个包含一些数据的文件,我想从这个包含特定子字符串的文件中删除一些行。
我的档案示例:
{1:F21FIEGEGCXAXXX4781478239}{4:{177:1603150825}{451:0}}
{1:F01FIEGEGCXAXXX4781478239}
{2:O1030924160315RJHISARIAXXX83068856911603150825N}
{4::20:PO/180797059/767
:23B:CRED
:32A:160315USD1405,19
:50K:/213000010006082015619
M A A H
TABOUK 71411 PO BOX 000001
:53B:/152700
:57A:FIEGEGCXMIN
:59:/3829
ESAM ABDELALIM ABDELRAHMAN HABIB
EGYPT
:70:Family Expenses
:71A:SHA-}
{5:{MAC:00000000}{CHK:C04D5471B9E9}}{S:{SAC:}{COP:P}}
我想删除以{451:0}}
结尾的每一行,如第一行和{COP:P}}
,如最后一行。
答案 0 :(得分:1)
如果输入文件不是很大。以下可能是解决方案的起点。
{{ breakpoints | lap }}
编辑正如Klitos Kyriacou在评论中所建议的那样。对于大文件,我们应该跳过创建临时列表。
Path in = Paths.get("in.txt");
Path out = Paths.get("out.txt");
Files.write(out, Files.lines(in, StandardCharsets.UTF_8)
.filter(s -> !s.endsWith("{451:0}}") && !s.endsWith("{COP:P}}"))
.collect(Collectors.toList()));
答案 1 :(得分:0)
像这样 -
try{
Scanner scanner = new Scanner(new File("input.txt"));
Writer writer = new PrintWriter(new File("output.txt"));
while(scanner.hasNextLine()){
String line = scanner.nextLine();
if(!line.endsWith("{451:0}}") && !line.endsWith("{COP:P}}")){
writer.write(line+System.getProperty("line.separator"));
}
}
scanner.close();
writer.flush();
writer.close();
}catch(Exception e){
e.printStackTrace();
}