Подскажите какой вариант файлов не пройдет валидатор? (Upd 2). Заранее спасибо и +1 вам в карму
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;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file1 = reader.readLine();
String file2 = reader.readLine();
reader.close();
FileReader file1Reader = new FileReader(file1);
ArrayList<String> linesFile1 = new ArrayList<>();
FileReader file2Reader = new FileReader(file2);
ArrayList<String> linesFile2 = new ArrayList<>();
String s1 = "";
while (file1Reader.ready()) {
s1 += (char) file1Reader.read();
}
file1Reader.close();
for (String line :
s1.split("\r\n")) {
if (!line.equals(""))
linesFile1.add(line);
}
String s2 = "";
while (file2Reader.ready()) {
s2 += (char) file2Reader.read();
}
file2Reader.close();
for (String line :
s2.split("\r\n")) {
if (!line.equals(""))
linesFile2.add(line);
}
int lf1Pos = 0;
int lf2Pos = 0;
int lf1MaxPos = linesFile1.size() - 1;
int lf2MaxPos = linesFile2.size() - 1;
while (lf1Pos < lf1MaxPos || lf2Pos < lf2MaxPos) {
if (linesFile1.get(lf1Pos).equals(linesFile2.get(lf2Pos))) {
if (lf1Pos < lf1MaxPos && lf2Pos == lf2MaxPos) {
linesFile2.add("del");
lf1Pos++;
lf2Pos++;
} else if (lf1Pos == lf1MaxPos && lf2Pos < lf2MaxPos) {
linesFile1.add("add");
lf1Pos++;
lf2Pos++;
} else {
lf1Pos++;
lf2Pos++;
}
} else {
if (!linesFile1.get(lf1Pos).equals(linesFile2.get(lf2Pos + 1))){
linesFile2.add(lf2Pos, "del");
lf1Pos++;
lf2Pos++;
lf2MaxPos++;
}else{
linesFile1.add(lf1Pos, "add");
lf1Pos++;
lf2Pos++;
lf1MaxPos++;
}
}
}
if (linesFile1.size() == 0 && linesFile2.size() > 0)
linesFile1.add("add");
if (linesFile2.size() == 0 && linesFile1.size() > 0)
linesFile2.add("del");
for (int i = 0; i < linesFile1.size(); i++) {
if (!linesFile1.get(i).equals("add") && !linesFile2.get(i).equals("del"))
lines.add(new LineItem(Type.SAME, linesFile1.get(i)));
if (linesFile1.get(i).equals("add"))
lines.add(new LineItem(Type.ADDED, linesFile2.get(i)));
if (linesFile2.get(i).equals("del"))
lines.add(new LineItem(Type.REMOVED, linesFile1.get(i)));
}
lines.forEach(x -> System.out.println(x.type + " " + x.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;
}
}
}