Собственно говоря, не проходит последний пункт. Валидатор советует "Проверь вывод тегов из следующего примера: <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span>", но на мой взгляд с этим примером код работает корректно. Я даже ArrayList прикрутил, думал, вдруг валидатору не нравится порядок вывода, но нет.
package com.javarush.task.task19.task1918;
import java.io.*;
import java.nio.CharBuffer;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) throws IOException {
// BufferedReader reader = new BufferedReader(new StringReader("<span aria-hidden=\"true\" class=\"line-numbers-rows\"><span></span><span></span><span></span></span>"));
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
BufferedReader reader = new BufferedReader(new FileReader(console.readLine()));
console.close();
String text = reader.lines().collect(Collectors.joining());
reader.close();
Pattern p = Pattern.compile("<" + args[0] + " ?.*?>|(</" + args[0] + ")");
// Pattern p = Pattern.compile("(<" + "span" + " ?.*?>)|(</span>)");
Matcher m = p.matcher(text);
ArrayList<String> list = new ArrayList<>();
Stack<Integer> starts = new Stack<>();
while (m.find()) {
if (m.group().startsWith("</")) {
list.add(text.substring(starts.pop(), m.end()));
} else {
starts.push(m.start());
}
}
Collections.reverse(list);
list.forEach(System.out::println);
}
}