Программа отрабатывает корректно и выводит правильный результат.
Но валидатор ругается следующим образом: Программа должна выводить в консоль все теги, которые соответствуют тегу, заданному в параметре метода main. В чем тут может быть проблема?
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 tag = args[0];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String fileName = br.readLine();
br.close();
FileReader fr = new FileReader(fileName);
StringBuilder sb = new StringBuilder();
while (fr.ready()) {
int read = fr.read();
if ((char)read != '\n' && (char)read != '\r') {
sb.append((char) read);
}
}
fr.close();
String content = sb.toString();
tagParser(content, tag);
}
public static void tagParser(String toParse, String input) {
String tag = "<" + input;
String cut = toParse;
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < toParse.length(); i++) {
if (toParse.charAt(i) == '<') {
cut = toParse.substring(i);
break;
}
}
String tagClosed = "</" + tag.substring(1);
int count = 0;
int index = 0;
for (int i = 0; i < cut.length() - tag.length(); i++) {
if (cut.substring(i, i + tag.length()).equals(tag)) {
count++;
} else if (cut.substring(i, i + tagClosed.length()).equals(tagClosed)) {
count--;
if (count == 0) {
String parsed = cut.substring(index, 1 + i + tagClosed.length());
list.add(parsed);
index = 1 + i + tagClosed.length();
tagInnerParser(parsed, list, tag, tagClosed);
}
}
}
for (String s : list) {
System.out.println(s);
}
}
public static void tagInnerParser(String toParse, ArrayList<String> arrayList, String tag, String tagClosed) {
int count2 = 0;
int index2 = 0;
for (int i = tag.length() - 1; i < toParse.length() - tag.length() - tagClosed.length(); i++) {
if (toParse.substring(i, i + tag.length()).equals(tag)) {
count2++;
index2 = i;
} else if (toParse.substring(i, i + tagClosed.length()).equals(tagClosed)) {
count2--;
if (count2 == 0) {
String parsed = toParse.substring(index2, 1 + i + tagClosed.length());
arrayList.add(parsed);
index2 = 1 + i + tagClosed.length();
tagInnerParser(parsed, arrayList, tag, tagClosed);
}
}
}
}
}