Видел что многие используют Jsoup. Ну раз не проходили решил без него. Результат соответствует. Проверял с двумя вложенными тэгами. Если проблема в отсутствии Jsoup то может стоит это в задании прописать! Обновить код не получилось поэтому актуальный код ниже 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; public class Solution { public static void main(String[] args) throws IOException { String begintag = "<" + args[0]; String endtag = "</" + args[0] + ">"; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String file = reader.readLine(); reader.close(); BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); StringBuilder bsline = new StringBuilder(); while (bufferedReader.ready()) { bsline.append(bufferedReader.readLine()); } bufferedReader.close(); String line = " "+bsline.toString(); //весь файл преобразовал в строку и добавил пробел в начало, хз почему без этого не работает, есть там какой то символ ArrayList<Integer> beginTagInt = new ArrayList<>(); //лист для индексов открывающего тэга ArrayList<Integer> endTagInt = new ArrayList<>(); //лист для индексов закрывающего тэга ArrayList<String> str = new ArrayList<>(); //лист для результата String line2 = line; //временная переменная от которой буду отрезать куски int aaa = line2.indexOf(begintag); int bbb = 0; while (aaa > 0) {// заполняем первый лист if (beginTagInt.size() == 0) bbb += aaa; else bbb += aaa + begintag.length(); beginTagInt.add(bbb); line2 = line2.substring(line2.indexOf(begintag) + begintag.length()); aaa = line2.indexOf(begintag); } line2 = line; aaa = line2.indexOf(endtag); bbb = 0; while (aaa > 0) {// заполняем второй лист if (endTagInt.size() == 0) bbb += aaa; else bbb += aaa + endtag.length() - 1; endTagInt.add(bbb); line2 = line2.substring(line2.indexOf(endtag) + endtag.length() - 1); aaa = line2.indexOf(endtag); } int d = 0; while (beginTagInt.size() > 1) { if (d==beginTagInt.size()-1){ str.add(line.substring(beginTagInt.get(0), endTagInt.get(d) + endtag.length())); beginTagInt.remove(0); endTagInt.remove(d); d = 0; } if (beginTagInt.size()==1){ str.add(line.substring(beginTagInt.get(0), endTagInt.get(0) + endtag.length())); break; } if (beginTagInt.get(d + 1) > endTagInt.get(0)) { str.add(line.substring(beginTagInt.get(0), endTagInt.get(d) + endtag.length())); beginTagInt.remove(0); endTagInt.remove(d); d = 0; } else d++; } if (beginTagInt.size()==1){ str.add(line.substring(beginTagInt.get(0), endTagInt.get(0) + endtag.length())); } // добавляем последний элемент for (int w = 0; w < str.size(); w++) { System.out.println(str.get(w)); } } }