Все-же решил не лезть в 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;
import java.util.Collections;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) {
// String openTag = "span";
String openTag = args[0];
String closeTag = "/" + openTag;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileReader = new BufferedReader(new FileReader(reader.readLine()))) {
StringBuffer buffer = new StringBuffer();
while (fileReader.ready()) {
buffer.append(fileReader.readLine());
}
// String buffer = "Info about Leela <span xml:lang=\"en\" lang=\"en\"><b><span>Turanga Leela\n" +
// "</span></b></span><span>Super</span><span>girl</span>";
String sourceText = buffer.toString().replaceAll("\n", "").replaceAll("\r", "");
ArrayList<String> elements = new ArrayList<>();
Collections.addAll(elements, sourceText.split("<"));
elements.remove("");
Solution.printTag(elements, openTag, closeTag, 0, elements.size());
} catch (IOException e) {
e.getStackTrace();
}
}
private static void printTag(ArrayList<String>elements, String openTag, String closeTag, int start, int length) {
int firstElement = 0;
int flag = 0;
for (int i = start; i < length; i++) {
if (elements.get(i).contains(closeTag)) {
flag--;
if (flag == 0) {
StringBuffer tag= new StringBuffer();
for (int j = firstElement; j <= i; j++) {
tag.append("<");
tag.append(elements.get(j));
}
System.out.println(tag.toString());
if (i - firstElement >= 2) {
printTag(elements, openTag, closeTag, firstElement+1, i-firstElement);
}
}
} else if (elements.get(i).contains(openTag)) {
if (flag == 0) firstElement = i;
flag++;
}
}
}
}