2017-01-10 8 views
-2

いくつかのデータを含むファイルがあります。このファイルから特定の部分文字列を含む行をいくつか削除します。私のファイルのファイルから指定行を削除する方法は?

例:

{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}}で終わるすべての行を削除したいです。

+2

何か試しましたか?あなたが試したことの[mcve]を提供してください – ItamarG3

+0

あなたの探しているもののほとんどを提供するこの質問を参照してください、最後の行だけをサポートするように変更する必要があります: http://stackoverflow.com/questions/1377279/find-a-ファイル内の行と行を削除する – GavinF

+1

[特定の行をテキストファイルから削除する]の可能な複製?(http://stackoverflow.com/questions/1245243/delete-specific-line-from-a-テキストファイル) – Andremoniy

答えて

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(); 
    } 
1

を入力ファイルが巨大でない場合。以下は、解決の出発点になる可能性があります。

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())); 

コメントにKlitos Kyriacouによって示唆されるように編集。巨大なファイルの場合は、一時的なリストの作成をスキップする必要があります。

Stream<String> inStream = Files.lines(in, StandardCharsets.UTF_8) 
     .filter(s -> !s.endsWith("{451:0}}") && !s.endsWith("{COP:P}}")); 
Files.write(out, (Iterable<String>) inStream::iterator); 
+0

小さなファイルにはうってつけの解決策ですが、 'リスト'全体を作成して 'ストリーム'から必要な 'Iterable'を作成するのはなぜですか?代わりに 'Files.write(out、(...):: iterator)'を実行することができます - メソッド参照構文は、 'Iterable'インターフェース実装を作成するためのショートカットです(http://stackoverflow.com/a/に示されています)。 20130475/638028。これにより、巨大なファイルにも対処できます! –

+0

@KlitosKyriacou単に私はそれについて執着していません。あなたの提案を答えに加えました。ヒントをありがとう。 – SubOptimal