конечно знатно наговнокодил, но программа работает, выдает правильное решение независимо от степени вложенности тегов. Но валидатор не принимает 5 пункт? чего он хочет то?
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.regex.Matcher;
import java.util.regex.Pattern;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) throws IOException {
ArrayList <Integer> list1 = new ArrayList<>();
ArrayList <Integer> list2 = new ArrayList<>();
StringBuilder sb = new StringBuilder();
BufferedReader reader =new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
BufferedReader reader1 =new BufferedReader(new FileReader(fileName));
while (reader1.ready()){
String data = reader1.readLine();
sb.append(data);
}
reader1.close();
String result=sb.toString();
String tag = args[0];
Pattern pattern = Pattern.compile("<"+tag +"\\.*");
Matcher matcher = pattern.matcher(result);
int i=0;
while (matcher.find()) {
i = matcher.start();
list1.add (i);
}
Pattern pattern1 = Pattern.compile("</"+tag +">");
Matcher matcher1 = pattern1.matcher(result);
int j= 0;
while (matcher1.find()) {
j = matcher1.end();
list2.add (j);
}
int k=1;
int n=0;
int m=0;
int x=0;
int sch=0;
int sch2=0;
while( k<list1.size()) {
while (list1.get(m) < list2.get(n)) {
m++;
k++;
sch++;
}
n=m;
for(int l=0; l<sch;l++){
System.out.println(result.substring(list1.get(l+x), list2.get(x+sch-l-1)));
}
x=m+x;
sch2=sch;
sch=0;
}
if(list2.get(list2.size()-1)<list2.get(list2.size()-2))
System.out.println(result.substring(list1.get(list1.size()-1),list2.get(list2.size()-sch2)));
else
System.out.println(result.substring(list1.get(list1.size()-1),list2.get(list2.size()-1)));
}
}