Добрый вечер. ПОДСКАЖИТЕ ТОЛЬКО НЕ РЕШЕНИЕ!!! Все два дня на третий день пишу я не знаю как сам добавить! ПОЖАЛУЙСТА, ЛЮДИ ДОБРЫЕ ПОДСКАЖИТЕ ТОЛЬКО НЕ РЕШЕНИЕ!!!
Я через иф пытался, но в итоге вообще концов не нашел! Потом через мап, а там засада они все сортируются автоматически строятся!!! Сейчас через листы с как в условие все показывает верно, но опять валидатор нет пишет, ПОДСКАЖИТЕ где смотреть и пожалуйста не пишите решение будьте людьми!
package com.javarush.task.task19.task1916;
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
public static void main(String[] args) throws FileNotFoundException {
ArrayList<String> belka = new ArrayList<>();
ArrayList<String> belkaGT = new ArrayList<>();
String s = "";
String ss = "";
try
(BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(System.in))) {
s = bufferedReader1.readLine();
ss = bufferedReader1.readLine();
} catch (Exception h) {
}
try
(FileReader fileReader1 = new FileReader(s);
BufferedReader bufferedReader2 = new BufferedReader(fileReader1)) {
for (int i = 0; bufferedReader2.ready(); i++) {
belka.add(i, bufferedReader2.readLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try
(FileReader fileReader2 = new FileReader(ss);
BufferedReader bufferedReader3 = new BufferedReader(fileReader2)) {
for (int i = 0; bufferedReader3.ready(); i++) {
belkaGT.add(i, bufferedReader3.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
List<Integer> belkaGTNomer=new ArrayList<>();
List<Integer> belkaNomer=new ArrayList<>();
for (int i = 0; i < belkaGT.size(); i++) { // номер строки файла2
int nomerStroki=0;
Pattern pattern=Pattern.compile("\\d+");
Matcher matcher= pattern.matcher(belkaGT.get(i));
while (matcher.find())
{
String stroka = belkaGT.get(i).substring(matcher.start());
nomerStroki = Integer.parseInt(stroka);
}
belkaGTNomer.add(i,nomerStroki);
}
for (int i = 0; i < belka.size(); i++) { // номер строки файла1
int nomerStroki=0;
Pattern pattern=Pattern.compile("\\d+");
Matcher matcher= pattern.matcher(belka.get(i));
while (matcher.find())
{
String stroka = belka.get(i).substring(matcher.start());
nomerStroki = Integer.parseInt(stroka);
}
belkaNomer.add(i,nomerStroki);
}
if (belka.size() > belkaGT.size()&&belka.size()- belkaGT.size()==1) { //Если файл 1 больше файла2 и размер файла 2 равно 1
int nomerStrokiIndex = 0;
int pazmerItogo = belka.size() + (belka.size() - belkaGT.size());
int pazmer1 = pazmerItogo - 1;
for (int i = 0, j = 0, f = 0; i < pazmer1; j++, i++, f++) {
if (belkaGT.size() > i) {
if (belkaNomer.get(f) == belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.SAME, " " + belkaGT.get(j)));
} else if (belkaNomer.get(f) < belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.REMOVED, " " + belka.get(f)));
j--;
} else if (belkaNomer.get(f) > belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.ADDED, " " + belkaGT.get(j)));
f--;
}
} else if (belkaGT.size() < i) {
if (belkaNomer.get(f) == belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.SAME, " " + belkaGT.get(j)));
} else if (belkaNomer.get(f) < belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.REMOVED, " " + belka.get(f)));
j--;
} else if (belkaNomer.get(f) > belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.ADDED, " " + belkaGT.get(j)));
f--;
}
}
nomerStrokiIndex = i;
}
if (pazmerItogo - lines.size() > 1) {
lines.add(nomerStrokiIndex, new LineItem(Type.REMOVED, " " + belka.get(nomerStrokiIndex)));
}
}
if (belka.size() > belkaGT.size()&&belka.size()- belkaGT.size()!=1) { //Если файл 1 больше файла2 и размер файла 2 не 1
int nomerStrokiIndex=0;
int pazmerItogo = belka.size() + (belka.size() - belkaGT.size());
int pazmer1 = pazmerItogo - 1;
for (int i = 0, j = 0, f = 0; i < pazmerItogo; j++, i++, f++) {
if (belkaGT.size() > i) {
if (belkaNomer.get(f) == belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.SAME, " " + belkaGT.get(j)));
} else if (belkaNomer.get(f) < belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.REMOVED, " " + belka.get(f)));
j--;
} else if (belkaNomer.get(f) > belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.ADDED, " " + belkaGT.get(j)));
f--;
}
} else if (belka.size() >= i) {
if (belkaNomer.get(f) == belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.SAME, " " + belkaGT.get(j)));
} else if (belkaNomer.get(f) < belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.REMOVED, " " + belka.get(f)));
j--;
} else if (belkaNomer.get(f) > belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.ADDED, " " + belkaGT.get(j)));
f--;
}
}
nomerStrokiIndex=i;
}
if (pazmerItogo-lines.size()>0)
{
for (int i = nomerStrokiIndex, j=nomerStrokiIndex; pazmerItogo>i; j++, i++) {
lines.add(pazmer1, new LineItem(Type.REMOVED, " " + belka.get(belka.size()-1)));
}
}
}
else if(belka.size() < belkaGT.size()){ //Если файл 2 больше файла1
int pazmerItogo = belkaGT.size() + (belkaGT.size() - belka.size());
int pazmer1 = pazmerItogo - 1;
for (int i = 0, j = 0, f = 0; i < belkaGT.size(); j++, i++, f++) {
if (belka.size() > i) {
if (belkaNomer.get(f) == belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.SAME, " " + belkaGT.get(j)));
} else if (belkaNomer.get(f) < belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.REMOVED, " " + belka.get(f)));
j--;
} else if (belkaNomer.get(f) > belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.ADDED, " " + belkaGT.get(j)));
f--;
}
} else if(belka.size()<i){
if (belkaNomer.get(f) == belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.SAME, " " + belkaGT.get(j)));
} else if (belkaNomer.get(f) < belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.REMOVED, " " + belka.get(f)));
j--;
} else if (belkaNomer.get(f) > belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.ADDED, " " + belkaGT.get(j)));
f--;
}
}
}
if (belkaGT.size()==1)
{
lines.add( belkaGT.size()-1, new LineItem(Type.ADDED, " " + belkaGT.get(belkaGT.size()-1)));
}else
{
lines.add( belkaGT.size()-1, new LineItem(Type.ADDED, " " + belkaGT.get(belkaGT.size()-1)));
}
}
else {
int pazmerItogo = belkaGT.size() + (belkaGT.size() - belka.size());
int pazmer1 = pazmerItogo - 1;
for (int i = 0, j = 0, f = 0; i < belkaGT.size(); j++, i++, f++) {
if (belka.size() > i) {
if (belkaNomer.get(f) == belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.SAME, " " + belkaGT.get(j)));
} else if (belkaNomer.get(f) < belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.REMOVED, " " + belka.get(f)));
j--;
} else if (belkaNomer.get(f) > belkaGTNomer.get(j)) {
lines.add(i, new LineItem(Type.ADDED, " " + belkaGT.get(j)));
f--;
}
}
}
}
// for (int i = 0; i < lines.size(); i++) {
//System.out.println(lines.get(i).type+lines.get(i).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;
}
}
}