Жду тестов для проверки кода
package com.javarush.task.task19.task1916;
import java.io.*;
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) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите 1-й файл:");
String fileName1 = bufferedReader.readLine();
System.out.println("Введите 2-й файл:");
String fileName2 = bufferedReader.readLine();
bufferedReader.close();
// String fileName1 = "5.txt";
// String fileName2 = "6.txt";
List<String> list1 = getStringsFromFile(fileName1);
List<String> list2 = getStringsFromFile(fileName2);
getResultList(list1, list2);
for (LineItem li : lines) {
System.out.println(li);
}
}
private static void getResultList(List<String> list1, List<String> list2) {
LineItem lineItem = null;
byte firstSheet = 0;
byte secondSheet = 0;
int firstListSize = list1.size();
int secondListSize = list2.size();
if(firstListSize > secondListSize) {
for (int i = 0; i < firstListSize; i++) {
String firstLine = list1.get(i);
String secondLine = "";
if(i + secondSheet < secondListSize) {
secondLine = list2.get(i + secondSheet);
}
if(firstLine.equals(secondLine)) {
lineItem = new LineItem(Type.SAME, firstLine);
} else if((i == firstListSize - 1 && secondLine.equals("")) || list1.get(i + 1).equals(secondLine)) {
lineItem = new LineItem(Type.REMOVED, firstLine);
secondSheet--;
} else if(firstLine.equals(list2.get(i + secondSheet + 1))) {
lineItem = new LineItem(Type.ADDED, secondLine);
i--;
secondSheet++;
}
lines.add(lineItem);
}
} else { //if(secondListSize > firstListSize)
for (int i = 0; i < secondListSize; i++) {
String secondLine = list2.get(i);
String firstLine = "";
if(i + firstSheet < firstListSize) {
firstLine = list1.get(i + firstSheet);
}
if(secondLine.equals(firstLine)) {
lineItem = new LineItem(Type.SAME, firstLine);
} else if((i == secondListSize - 1 && firstLine.equals("")) || list2.get(i + 1).equals(firstLine)) {
lineItem = new LineItem(Type.ADDED, secondLine);
firstSheet--;
} else if(secondLine.equals(list1.get(i + firstSheet + 1))) {
lineItem = new LineItem(Type.REMOVED, firstLine);
i--;
firstSheet++;
}
lines.add(lineItem);
if(i == secondListSize - 1 && firstSheet == -1 && (!firstLine.equals(list1.get(firstListSize - 1)))
&& firstListSize == secondListSize) {
lineItem = new LineItem(Type.REMOVED, list1.get(firstListSize - 1));
lines.add(lineItem);
}
}
}
}
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 "" + type + " " + line;
}
}
private static List<String> getStringsFromFile(String fileName) throws IOException {
List<String> result = new ArrayList<>();
FileReader fileReader = new FileReader(fileName);
StringBuilder stringBuilder = new StringBuilder();
while (fileReader.ready()) {
char[] chars = new char[512];
fileReader.read(chars);
stringBuilder.append(new String(chars).replaceAll("\r", "").trim());
}
fileReader.close();
String[] strings = stringBuilder.toString().split("\n");
for (String s : strings) {
result.add(s);
}
return result;
}
}