Реализовано долго и мучительно)) И говнокод, к сожалению, конечно, получился. Но по предложенным вариантам отрабатывает..
Прошу подсказать, что я делаю не так - какой пример не отработан, не учтён?
Заранее спасибо! =)
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name = reader.readLine();
reader.close();
FileReader fileReader = new FileReader(name);
StringBuilder stringBuilder = new StringBuilder();
while (fileReader.ready()) {
char data = (char) fileReader.read();
stringBuilder.append(data);
}
fileReader.close();
String text = stringBuilder.toString();
// System.out.println(text);
ArrayList<Integer> arrayListIndexBegin = new ArrayList<>();
ArrayList<Integer> arrayListIndexEnds = new ArrayList<>();
String tagBegin = "<".concat(args[0]);
String tagEnd = "</".concat(args[0]).concat(">");
for (int i = 0; i < text.length(); i++) {
if (text.indexOf(tagBegin, i) >= 0) {
int num = text.indexOf(tagBegin, i);
arrayListIndexBegin.add(num);
i = num + (args[0].length());
}
}
for (int i = 0; i < text.length(); i++) {
if (text.indexOf(tagEnd, i) > 0) {
int num = text.indexOf(tagEnd, i) + 3 + (args[0].length());
arrayListIndexEnds.add(num );
i = num - 1;
}
}
Collections.sort(arrayListIndexBegin);
Collections.sort(arrayListIndexEnds);
// for (int i = 0; i < arrayListIndexBegin.size(); i++) {
// System.out.println(arrayListIndexBegin.get(i)+ " Begin");
// System.out.println(arrayListIndexEnds.get(i) + " End");
// }
int count = 0; // счётчик вложенных тегов
int m = 0; // счётчик уже напечатанных тегов
for (int i = 0; i < arrayListIndexEnds.size(); i++) {
for (int j = 0; j < arrayListIndexBegin.size() - i; j++) {
if (m >= arrayListIndexBegin.size()) break; // проверка - напечатаны уже все нужные данные из массивов?
if (arrayListIndexEnds.get(i) > arrayListIndexBegin.get(i + j)){ //если конечный номер тега больше начального - поиск вложенных тегов
count++;
if (count == arrayListIndexBegin.size()) { // вариант, если количество вложенных тегов равно всему количеству тегов
int l = count + m;
for (int k = 0; k < count; k++) {
System.out.println(text.substring(arrayListIndexBegin.get(m), arrayListIndexEnds.get(l - k - 1)));
m++;
}
}
}
else { // вариант, если количество вложенных тегов меньше количества всех тегов
if (count > 1){ // вариант, если есть вложенные теги
int l = count + m;
for (int k = 0; k < count; k++) {
System.out.println(text.substring(arrayListIndexBegin.get(m), arrayListIndexEnds.get(l - k - 1)));
m++;
}
}
else {
System.out.println(text.substring(arrayListIndexBegin.get(m), arrayListIndexEnds.get(m)));
m++;
}
count = 0;
}
}
}
}
}