Advertisement
mamant38

file2 изменения

Jun 7th, 2018
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.56 KB | None | 0 0
  1. package com.javarush.task.task19.task1916;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9.  
  10. /*
  11. Отслеживаем изменения
  12. Считать с консоли 2 имени файла - file1, file2.
  13. Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
  14. Нужно создать объединенную версию строк, записать их в список lines.
  15. Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME.
  16. В оригинальном и редактируемом файлах пустых строк нет!
  17.  
  18. Пример:
  19. оригинальный    редактированный    общий
  20. file1:          file2:             результат:(lines)
  21.  
  22. строка1         строка1            SAME строка1 // одна и таже
  23. строка2                            REMOVED строка2 // снято
  24. строка3         строка3            SAME строка3
  25. строка4                            REMOVED строка4
  26. строка5         строка5            SAME строка5
  27.                 строка0            ADDED строка0 // ДОБАВлено
  28.  
  29. строка1         строка1            SAME строка1
  30. строка2                            REMOVED строка2
  31. строка3         строка3            SAME строка3
  32.                 строка4            ADDED строка4
  33. строка5         строка5            SAME строка5
  34. строка0                            REMOVED строка0
  35.  
  36. Пустые строки в примере означают, что этой строки нет в определенном файле.
  37.  
  38.  
  39. Требования:
  40. 1. Класс Solution должен содержать класс LineItem.
  41. 2. Класс Solution должен содержать enum Type.
  42. 3. Класс Solution должен содержать публичное статическое поле lines типа List, которое сразу проинициализировано.
  43. 4. В методе main(String[] args) программа должна считывать имена файлов с консоли (используй BufferedReader).
  44. 5. В методе main(String[] args) BufferedReader для считывания данных с консоли должен быть закрыт.
  45. 6. Программа должна считывать содержимое первого и второго файла (используй FileReader).
  46. 7. Потоки чтения из файлов (FileReader) должны быть закрыты.
  47. 8. Список lines должен содержать объединенную версию строк из файлов, где для каждой строки указана одна из операций ADDED, REMOVED, SAME.
  48. */
  49.  
  50. public class Solution {
  51.     public static List<LineItem> lines = new ArrayList<LineItem>();
  52.  
  53.     public static void main(String[] args) throws IOException {
  54.         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  55.         String filename1 = bufferedReader.readLine();
  56.         String filemane2 = bufferedReader.readLine();
  57.  
  58.         bufferedReader.close();
  59.  
  60.         BufferedReader br = new BufferedReader(new FileReader(filename1));
  61.  
  62.         BufferedReader br2 = new BufferedReader(new FileReader(filemane2));
  63.  
  64.         ArrayList<String> list1 = new ArrayList<>();
  65.         ArrayList<String> list2 = new ArrayList<>();
  66.         String str1;
  67.         String str2;
  68.         while ((str1 = br.readLine()) != null) {
  69.             list1.add(str1);
  70.         }
  71.         while ((str2 = br2.readLine()) != null) {
  72.             list2.add(str2);
  73.         }
  74.         br.close();
  75.         br2.close();
  76.  
  77.  
  78.         int i = 0;
  79.         int j = 0;
  80.  
  81.  
  82.         while (j < list2.size()  && i < list1.size()) {
  83.              if (list1.get(i).equals(list2.get(j))) {
  84.                     lines.add(new LineItem(Type.SAME, list1.get(i)));
  85.                     i++;
  86.                     j++;
  87.  
  88.                 } else if (list2.size() > j + 1 && list1.get(i).equals(list2.get(j + 1))) {
  89.                     lines.add(new LineItem(Type.ADDED, list2.get(j)));
  90.                     j++;
  91.  
  92.  
  93.                 } else if (list1.size() > i + 1  && list1.get(i + 1).equals(list2.get(j))) {
  94.                     lines.add(new LineItem(Type.REMOVED, list1.get(i)));
  95.                     i++;
  96.  
  97.                 }
  98.                 if (i==list1.size()&& j!=list2.size()){
  99.  
  100.                     lines.add(new LineItem(Type.ADDED, list2.get(j)));
  101.                 }else if (j==list2.size()&&i!=list1.size()){
  102.  
  103.                     lines.add(new LineItem(Type.REMOVED, list1.get(i)));
  104.                 }
  105.  
  106.  
  107.         }
  108.  
  109.         for (LineItem lineItem : lines) {
  110.             System.out.println(lineItem.type + " " + lineItem.line);
  111.         }
  112.         }
  113.  
  114.  
  115.  
  116.  
  117.     public static enum Type {
  118.         ADDED,        //добавлена новая строка
  119.         REMOVED,      //удалена строка
  120.         SAME          //без изменений
  121.     }
  122.  
  123.     public static class LineItem {
  124.         public Type type;
  125.         public String line;
  126.  
  127.         public LineItem(Type type, String line) {
  128.             this.type = type;
  129.             this.line = line;
  130.         }
  131.     }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement