2016-09-07 19 views

答えて

1

これはトリックを行うと思います。古いファイルを最初に処理し、新しいファイルから既存のファイルを上書きします。

import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

... 

public class ContactsProcessor { 
    public static void main(String[] args) { 
     List<String> contactsNew = Files.readAllLines(Paths.get("contactsNew.tsv")); 
     List<String> contactsOld = Files.readAllLines(Paths.get("contactsOld.tsv")); 
     List<String> contactsGmail = new ArrayList<String>(); 
     Map<String, String> gmailMap = new HashMap<String, String>(); 

     // process old contacts first -- add to a Map 
     for (String info : contactsOld) { 
      String[] parts = info.split("\\t"); 
      if (info.endsWith("@gmail.com")) { 
       gmailMap.put(parts[0], info); 
      } 
     } 
     // process new contacts second -- add to a Map, overwriting old contacts with same name 
     for (String info : contactsNew) { 
      String[] parts = info.split("\\t"); 
      if (info.endsWith("@gmail.com")) { 
       gmailMap.put(parts[0], info); 
      } 
     } 
     contactsGmail.addAll(gmailMap.values()); 
     Collections.sort(contactsGmail); 

     Files.write(Paths.get("contactsGmail.tsv"), contactsGmail); 
    } 
} 
+0

ありがとうございました。しかし、gmailMap.put(parts [2]、info)はarrayindexoutofbound例外を投げています – rahul

+0

実際にあなたの入力に問題があるかもしれません。タブ間のものの1つが空の場合、リストが縮小され、ArrayIndexOutOfBoundsExceptionが発生します。 – byxor

+0

私はあなたの助けに感謝します。しかし、上記の方法は依然として重複した内容を書きます。 – rahul

関連する問題