На том, чем я проверяю, всё корректно: и несколько уровней вложенности, и пробелы, и разбивка на несколько строк...
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 {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String current = reader.readLine();
reader.close();
StringBuilder sb = new StringBuilder();
reader = new BufferedReader(new FileReader(current));
while (reader.ready()) {
sb.append(reader.readLine());
}
reader.close();
current = sb.toString().replaceAll("\n|\r","");
Matcher matcher = Pattern.compile("<\\s*" + args[0] + "[^>]*>").matcher(current);
Matcher matcher2 = Pattern.compile("</" + args[0] + "\\s*>").matcher(current);
ArrayList<Integer> openTag = new ArrayList<>();
ArrayList<Integer> closeTag = new ArrayList<>();
ArrayList<String> result = new ArrayList<>();
while (matcher.find()) {
openTag.add(matcher.start());
}
while (matcher2.find()) {
closeTag.add(matcher2.end());
}
while(openTag.size()!=0){
result.add(current.substring(openTag.get(0),closeTag.get(closeTag.size()-1)));
openTag.remove(0);
closeTag.remove(closeTag.size()-1);
}
for (String string : result) System.out.println(string);
}
}