Hello,
In the example, is file1 like this ? :
line1
line2
line3
line4
line5
line1
line2
line3
line5
line0
And file2 like this ? :
line1
line3
line5
line0
line1
line3
line4
line5
I am not sure that I have understood how these files are made of.
Or pear-heaps is it like that ?
file1: file2:
line1 line1
line2 other3
line3 line3
line4 other4
line5 line5
other1 line0
line1 line1
line2 other5
line3 line3
other2 line4
line5 line5
line0 other6
But in the second hypothesis, line2 doesn't exist in file2.
package fr.codegym.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;
/*
Suivi des modifications
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader lecteur = new BufferedReader(new InputStreamReader(System.in));
BufferedReader lecteurFichier1 = new BufferedReader(new FileReader(lecteur.readLine()));
BufferedReader lecteurFichier2 = new BufferedReader(new FileReader(lecteur.readLine()));
lecteur.close();
String contenuFichier1 = null;
String contenuFichier2 = null;
ArrayList<String> lignesFichier1 = new ArrayList<>();
ArrayList<String> lignesFichier2 = new ArrayList<>();
while((contenuFichier1 = lecteurFichier1.readLine()) != null && (contenuFichier2 = lecteurFichier2.readLine()) != null || contenuFichier1 != null || (contenuFichier2 = lecteurFichier2.readLine()) != null) {
if(contenuFichier1 != null) {
lignesFichier1.add(contenuFichier1);
}
if(contenuFichier2 != null) {
lignesFichier2.add(contenuFichier2);
}
}
lecteurFichier1.close();
lecteurFichier2.close();
int i = 0;
int j = 0;
int k = lignesFichier1.size()-1;
int l = lignesFichier2.size()-1;
int m = 0;
int n = 0;
if (lignesFichier1.size() >= lignesFichier2.size()) {
while(i < lignesFichier1.size()) {
if(m > l) {
lines.add((new LineItem(Type.REMOVED, lignesFichier1.get(i))));
i++;
break;
}
if(lignesFichier1.get(i).equals(lignesFichier2.get(j))) {
lines.add(new LineItem(Type.SAME, lignesFichier1.get(i)));
i++;
m++;
j++;
}else {
if(i < lignesFichier1.size()-1 && lignesFichier1.get(i+1).equals(lignesFichier2.get(j))) {
lines.add(new LineItem(Type.REMOVED, lignesFichier1.get(i)));
i++;
m++;
l++;
}
if(j < lignesFichier2.size()-1 && lignesFichier2.get(j+1).equals(lignesFichier1.get(i))) {
lines.add(new LineItem(Type.ADDED, lignesFichier2.get(j)));
j++;
m++;
}
}
}
}else{
i = 0;
j = 0;
while(i < lignesFichier2.size()) {
if(n > k) {
lines.add(new LineItem(Type.ADDED, lignesFichier2.get(i)));
i++;
break;
}
if(lignesFichier1.get(j).equals(lignesFichier2.get(i))) {
lines.add(new LineItem(Type.SAME, lignesFichier1.get(j)));
i++;
n++;
j++;
}else {
if(j < lignesFichier1.size()-1 && lignesFichier1.get(j+1).equals(lignesFichier2.get(i))) {
lines.add(new LineItem(Type.REMOVED, lignesFichier1.get(j)));
j++;
n++;
l++;
}
if(i < lignesFichier2.size()-1 && lignesFichier2.get(i+1).equals(lignesFichier1.get(j))) {
lines.add(new LineItem(Type.ADDED, lignesFichier2.get(i)));
i++;
n++;
k++;
}
}
}
}
//for( LineItem item : lines) {
// System.out.println(item.type + " " + item.line);
//}
}
public static enum Type {
ADDED, // Nouvelle ligne ajoutée
REMOVED, // Ligne supprimée
SAME // Pas de changement
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}