Может проблема в том, что мой вариант заточен на наличие цифр в строках файла?
Со всеми вариантами, описанными в чужих вопросах, имеющих вид "строка1, строка2" и т.д. работает верно.
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;
/*
Считать с консоли 2 имени файла - file1, file2.
Файлы содержат строки, file2 является обновленной версией file1, часть строк совпадают.
Нужно создать объединенную версию строк, записать их в список lines.
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME.
Пустые строки даны в примере для наглядности.
В оригинальном и редактируемом файлах пустых строк нет!
Пустые строки в примере означают, что этой строки нет в определенном файле.
Требования:
1. Класс Solution должен содержать класс LineItem.
2. Класс Solution должен содержать enum Type.
3. Класс Solution должен содержать публичное статическое поле lines типа List<LineItem>, которое сразу проинициализировано.
4. В методе main(String[] args) программа должна считывать имена файлов с консоли (используй BufferedReader).
5. В методе main(String[] args) BufferedReader для считывания данных с консоли должен быть закрыт.
6. Программа должна считывать содержимое первого и второго файла (используй FileReader).
7. Потоки чтения из файлов (FileReader) должны быть закрыты.
8. Список lines должен содержать объединенную версию строк из файлов, где для каждой строки указана одна из операций ADDED, REMOVED, SAME.
//String path1 = reader.readLine();
//String path2 = reader.readLine();
reader.close();
BufferedReader Freader1 = new BufferedReader(new FileReader("C:\\text\\text.txt"));//
BufferedReader Freader2 = new BufferedReader(new FileReader("C:\\text\\text4.txt"));
*/
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 path1 = reader.readLine();
String path2 = reader.readLine();
reader.close();
BufferedReader Freader1 = new BufferedReader(new FileReader(path1));//
BufferedReader Freader2 = new BufferedReader(new FileReader(path2));
String LineF1 = Freader1.readLine();
String LineF2 = Freader2.readLine();
boolean isFinished = false;
while (true) {
if (extractNumber(LineF1) < extractNumber(LineF2)) {
lines.add(new LineItem(Type.REMOVED, LineF1));
LineF1 = Freader1.readLine();
}
else if (extractNumber(LineF1) > extractNumber(LineF2)) {
lines.add(new LineItem(Type.ADDED, LineF2));
LineF2 = Freader2.readLine();
}
else if (extractNumber(LineF1) == extractNumber(LineF2) && (extractNumber(LineF1)!= 1000 && extractNumber(LineF2)!= 1000)) {
lines.add(new LineItem(Type.SAME, LineF2));
LineF1 = Freader1.readLine();
LineF2 = Freader2.readLine();
}
if (isFinished)
break;
if (!Freader1.ready() && !Freader2.ready())
isFinished = true;
}
Freader1.close();
Freader2.close();
for (LineItem item : lines) {
System.out.println(item.type + item.line);
}
}
public static enum Type {
ADDED, //добавлена новая строка
REMOVED, //удалена строка
SAME //без изменений
}
public static int extractNumber (String line) {
if (line != null)
return Integer.valueOf(line.substring(line.length()-1));
else
return 1000;
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}