Привет,
моё решение в тестовых вариантах всё находило, но валидатор его не принимает, причём комментарий такой себе "Не выполнены все требования задачи"
может кто-то из администрации подсказать, какой именно тест не проходится?
Честно говоря, это самая тяжёлая для меня задача из всего курса, тут водили за нос по поводу регулярных выражений во всех предыдущих задачах и я как-то зря потратил время изучая эту тему, хотя тут всё через циклы можно сделать..
Но опять таки - что именно валидатор хочет от меня - загадка...
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.*;
/*
Знакомство с тегами
*/
public class Solution
{
public static void main(String[] args) throws Exception
{
String tag = args[0];
String openTag = "<" + tag;
String closeTag = "</" + tag + ">";
BufferedReader kb = new BufferedReader(new InputStreamReader(System.in));
String pageName = kb.readLine();
kb.close();
BufferedReader webPage = new BufferedReader(new FileReader(pageName));
StringBuilder fileLines = new StringBuilder();
while (webPage.ready())
{
fileLines.append(webPage.readLine());
}
webPage.close();
String content = fileLines.toString().replaceAll("[\\r\\n]+", "");
//У ідэі replaceAll не патрэбна, stringBuilder стварае адразу адзін радок без пераносаў на наступны радок
//зроблена, как прайсці валідацыю
int indexStartTag = 0;
ArrayList<Integer> indexesStartTag = new ArrayList<>();
int indexEndTag = 0;
ArrayList<Integer> indexesEndTag = new ArrayList<>();
int tempCheck = -1;
while (indexStartTag != -1)
{
indexStartTag = content.indexOf(openTag, tempCheck + 1);
tempCheck = indexStartTag;
if (indexStartTag != -1)
{
indexesStartTag.add(indexStartTag);
}
}
tempCheck = -1;
while (indexEndTag != -1)
{
indexEndTag = content.indexOf(closeTag, tempCheck + 1);
tempCheck = indexEndTag;
if (indexEndTag != -1)
{
indexesEndTag.add(indexEndTag);
}
}
ArrayList<Integer> pairedEndTag = new ArrayList<>(indexesEndTag);
ArrayList<Integer> pairedBeginTag = new ArrayList<>(indexesStartTag);
ArrayList<Integer> allTags = new ArrayList<>();
TreeMap<Integer, String> orderedTags = new TreeMap<>();
if (indexesStartTag.size() != indexesEndTag.size())
{
System.out.println("Warning! Not all tags have <open> </close> pair. Program exits!");
}
else
{
if (indexesStartTag.size() == 1)
{
System.out.println(content.substring(indexesStartTag.get(0), indexesEndTag.get(0) + closeTag.length()));
}
else
{
for (int i = 0; i <pairedBeginTag.size(); i++ )
{
allTags.add(pairedBeginTag.get(i));
//System.out.print(pairedBeginTag.get(i) + " ");
allTags.add((pairedEndTag.get(i)));
//System.out.println(pairedEndTag.get(i));
}
while (!allTags.isEmpty())
{
if (allTags.size() == 2)
{
orderedTags.put(allTags.get(0), content.substring(allTags.get(0), allTags.get(1) + closeTag.length()));
allTags.remove(1);
allTags.remove(0);
//System.out.println("[END] got last two!");
}
else
{
if (allTags.get(2) < allTags.get(1))
{
if (allTags.size() > 4)
{
int j = 2;
do
{
j = j + 2;
}
while (allTags.get(j) < allTags.get(1));
j = j - 2;
//System.out.println(content.substring(allTags.get(j), allTags.get(1) + closeTag.length()));
orderedTags.put(allTags.get(j), content.substring(allTags.get(j), allTags.get(1) + closeTag.length()));
allTags.remove(j);
allTags.remove(1);
}
else
{
orderedTags.put(allTags.get(2), content.substring(allTags.get(2), allTags.get(1) + closeTag.length()));
orderedTags.put(allTags.get(0), content.substring(allTags.get(0), allTags.get(3) + closeTag.length()));
allTags.remove(3);
allTags.remove(2);
allTags.remove(1);
allTags.remove(0);
}
}
else
{
orderedTags.put(allTags.get(0), content.substring(allTags.get(0), allTags.get(1) + closeTag.length()));
allTags.remove(1);
allTags.remove(0);
//System.out.println(content.substring(allTags.get(0), allTags.get(1) + closeTag.length()));
}
}
}
}
}
for (Map.Entry<Integer, String> currentTag : orderedTags.entrySet())
{
System.out.println(currentTag.getValue());
}
}
}