Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.javarush.task.task19.task1916;
- import java.io.BufferedReader;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.ArrayList;
- import java.util.List;
- /*
- Отслеживаем изменения
- Считать с консоли 2 имени файла - file1, file2.
- Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
- Нужно создать объединенную версию строк, записать их в список lines.
- Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME.
- В оригинальном и редактируемом файлах пустых строк нет!
- Пример:
- оригинальный редактированный общий
- file1: file2: результат:(lines)
- строка1 строка1 SAME строка1 // одна и таже
- строка2 REMOVED строка2 // снято
- строка3 строка3 SAME строка3
- строка4 REMOVED строка4
- строка5 строка5 SAME строка5
- строка0 ADDED строка0 // ДОБАВлено
- строка1 строка1 SAME строка1
- строка2 REMOVED строка2
- строка3 строка3 SAME строка3
- строка4 ADDED строка4
- строка5 строка5 SAME строка5
- строка0 REMOVED строка0
- Пустые строки в примере означают, что этой строки нет в определенном файле.
- Требования:
- 1. Класс Solution должен содержать класс LineItem.
- 2. Класс Solution должен содержать enum Type.
- 3. Класс Solution должен содержать публичное статическое поле lines типа List, которое сразу проинициализировано.
- 4. В методе main(String[] args) программа должна считывать имена файлов с консоли (используй BufferedReader).
- 5. В методе main(String[] args) BufferedReader для считывания данных с консоли должен быть закрыт.
- 6. Программа должна считывать содержимое первого и второго файла (используй FileReader).
- 7. Потоки чтения из файлов (FileReader) должны быть закрыты.
- 8. Список lines должен содержать объединенную версию строк из файлов, где для каждой строки указана одна из операций ADDED, REMOVED, SAME.
- */
- public class Solution {
- public static List<LineItem> lines = new ArrayList<LineItem>();
- public static void main(String[] args) throws IOException {
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
- String filename1 = bufferedReader.readLine();
- String filemane2 = bufferedReader.readLine();
- bufferedReader.close();
- BufferedReader br = new BufferedReader(new FileReader(filename1));
- BufferedReader br2 = new BufferedReader(new FileReader(filemane2));
- ArrayList<String> list1 = new ArrayList<>();
- ArrayList<String> list2 = new ArrayList<>();
- String str1;
- String str2;
- while ((str1 = br.readLine()) != null) {
- list1.add(str1);
- }
- while ((str2 = br2.readLine()) != null) {
- list2.add(str2);
- }
- br.close();
- br2.close();
- int i = 0;
- int j = 0;
- while (j < list2.size() && i < list1.size()) {
- if (list1.get(i).equals(list2.get(j))) {
- lines.add(new LineItem(Type.SAME, list1.get(i)));
- i++;
- j++;
- } else if (list2.size() > j + 1 && list1.get(i).equals(list2.get(j + 1))) {
- lines.add(new LineItem(Type.ADDED, list2.get(j)));
- j++;
- } else if (list1.size() > i + 1 && list1.get(i + 1).equals(list2.get(j))) {
- lines.add(new LineItem(Type.REMOVED, list1.get(i)));
- i++;
- }
- if (i==list1.size()&& j!=list2.size()){
- lines.add(new LineItem(Type.ADDED, list2.get(j)));
- }else if (j==list2.size()&&i!=list1.size()){
- lines.add(new LineItem(Type.REMOVED, list1.get(i)));
- }
- }
- for (LineItem lineItem : lines) {
- System.out.println(lineItem.type + " " + lineItem.line);
- }
- }
- public static enum Type {
- ADDED, //добавлена новая строка
- REMOVED, //удалена строка
- SAME //без изменений
- }
- public static class LineItem {
- public Type type;
- public String line;
- public LineItem(Type type, String line) {
- this.type = type;
- this.line = line;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement