Объясните то, что я не понимаю и то, что я понимаю неверно следующим образом :
"В строке номер n ты понял не правильно. Правильно будет вот так вот так..." Спасибо заранее.
PS В начале все более менее понятно, в конце начинается лютый хаос
public class Solution {
public static void main(String[] args) throws IOException {
StringBuilder readFileContent = new StringBuilder();//создаем заполняемое поле для хранения данных html файла
try(BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader = new BufferedReader(new FileReader(consoleReader.readLine()))) {//вводим имя html файла, который нужно читать
while (fileReader.ready()) {//выполнять следующее, пока файлРидер не прочитает файл полностью
readFileContent = readFileContent.append(fileReader.readLine());//циклами заполняем данными дополняемое поле
}
}
String fileContent = readFileContent.toString().replaceAll("\r\n", "");//перемещаем все данные из стрингБафера в стринг без переносов строки
String openTag = "<" + args[0];//обозначаем внешний вид тега-открытия
String closingTag = "</" + args[0];//обозначаем внешний вид тега-закрытия
int tagLength = args[0].length();//обозначаем длину тега
int startTagIndex = 0;//обозначаем индекс начала тега, который будет в дальнейшем изменяться
int endTagIndex = 0;//обозначаем индекс конца тега, который будет в дальнейшем изменяться
ArrayList<String> tags = new ArrayList<>();//создаем список для хранения тегов
while ((startTagIndex != -1) && (startTagIndex < fileContent.length())) {//выполнять следующее, пока индекс начала строки не равен -1(пока существует)
startTagIndex = fileContent.indexOf(openTag, startTagIndex);//обозначаем первичные координаты тега-открытия
endTagIndex = fileContent.indexOf(closingTag, startTagIndex + tagLength);//обозначаем первичные координаты тега-закрытия
int indexInTag = startTagIndex + tagLength;//создаем виртуальный курсор и переставляем его в место конца уже обработанных данных и в начало еще не обработанных
if (endTagIndex != -1) {//если теги-закрытия еще есть(или есть необработанные теги-закрытия), выполняем следующее
while (fileContent.substring(indexInTag, endTagIndex).contains(openTag)) {//пока в обозреваемой области(от нашего виртуального курсора до индекса окончания тега) строки есть тег-открытие, выполняем следующее
indexInTag = endTagIndex + tagLength;//перемещаем виртуальный курсор в место по индексу окончания тега-закрытия
endTagIndex = fileContent.indexOf(closingTag, indexInTag);//ни хрена не пойму что тут делается
}
}
if (startTagIndex != -1 && endTagIndex !=-1) {//выполнять следующее, если есть стартовый тег и есть конечный тег
tags.add(fileContent.substring(startTagIndex, endTagIndex + tagLength + 3));//как я понимаю , записываем в список строки от индекса начала тега до индекса конца тега и хрен пойми зачем прибавляем к этому 3
startTagIndex += tagLength;//изменяем индекс начала, чтобы, как я понимаю, не обрабатывать одно и то же поле
}
}
for (String tag : tags) {
System.out.println(tag);
}
}
}