Как у многих - вывод вроде бы верный, но не принимает. Дайте пример для теста.
Основной вопрос - какова глубина вложенности тегов?
Возможен ли такой вариант - "<tag>_first_<tag>_second_<tag>_third_<tag>_fourth_</tag></tag></tag></tag>" ?
Решение через jsoup делать не хочу.
тесты такие:
args[0]="b"
input:
text
output:
text
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
args[0]="span"
input:
output:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
args[0]="span"
input:
Info about Leela Turanga Leela
Supergirl
output:
Turanga Leela
Turanga Leela
Super
girl
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 {
if (args.length == 0) {
return;
}
ArrayList<String> result = new ArrayList<>();
ArrayList<String> inners = new ArrayList<>();
String tag = "<" + args[0];
String closeTag = "</" + args[0] + ">";
String file;
String line = "";
try (BufferedReader console = new BufferedReader(new InputStreamReader(System.in))) {
file = console.readLine();
}
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
while (br.ready()) {
line += br.readLine();
}
line = line.substring(line.indexOf(tag), line.lastIndexOf(closeTag) + closeTag.length());
while (line.length() > 0) {
int indexOfcloseTag = line.indexOf(closeTag) + closeTag.length();
String outer = line.substring(0, indexOfcloseTag);
if(outer.substring(1).contains(tag)) {
int beginOfSearchIndex = outer.lastIndexOf(tag);
String search = line.substring(beginOfSearchIndex, indexOfcloseTag);
while (search.contains(tag)) {
inners.add(search);
beginOfSearchIndex = outer.length();
indexOfcloseTag = line.indexOf(closeTag, beginOfSearchIndex) + closeTag.length(); //? maybe substring(indexOfcloseTag + 1)
search = line.substring(beginOfSearchIndex, indexOfcloseTag);
outer += search;
}
result.add(outer);
result.addAll(inners);
inners.clear();
} else {
result.add(outer);
}
line = line.substring(outer.length());
}
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
result.forEach(System.out::println);
}
}
}