-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSolution.java
More file actions
142 lines (116 loc) · 5.91 KB
/
Solution.java
File metadata and controls
142 lines (116 loc) · 5.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//Jesus answered him, "I spoke openly to the world. I always taught in synagogues, and in the temple,
//where the Jews always meet. I said nothing in secret. (John 18:20)
package com.javarush.task.task19.task1916;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.LinkedList;
import java.util.stream.Collectors;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileReader fileReader1 = new FileReader(reader.readLine());
FileReader fileReader2 = new FileReader(reader.readLine())) {
List<String> original = new BufferedReader(fileReader1).lines().collect(Collectors.toList());
List<String> modified = new BufferedReader(fileReader2).lines().collect(Collectors.toList());
while (original.size() != 0 & modified.size() != 0) {
if (original.get(0).equals(modified.get(0))) {
lines.add(new LineItem(Type.SAME, original.remove(0)));
modified.remove(0);
} else if (modified.size() != 1 && original.get(0).equals(modified.get(1))) {
lines.add(new LineItem(Type.ADDED, modified.remove(0)));
} else if (original.size() != 1 && original.get(1).equals(modified.get(0))) {
lines.add(new LineItem(Type.REMOVED, original.remove(0)));
}
}
if (original.size() != 0) {
lines.add(new LineItem(Type.REMOVED, original.remove(0)));
} else if (modified.size() != 0) {
lines.add(new LineItem(Type.ADDED, modified.remove(0)));
}
} catch (IOException e) {
e.printStackTrace();
}
lines.forEach(System.out::println);
}
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;
}
@Override
public String toString() {
return "LineItem{" +
"type=" + type +
", line='" + line + '\'' +
'}';
}
}
}
/*
Отслеживаем изменения
Считать с консоли 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
строка5 ADDED строка5
строка4 строка4 SAME строка4
строка5 REMOVED строка5
Требования:
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.
package com.javarush.task.task19.task1916;
import java.util.ArrayList;
import java.util.List;
*
Отслеживаем изменения
*
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) {
}
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;
}
}
}
*/