Всем привет. Сомневаюсь что кто то захочет это тестить, что я тут наворотил, но все же. Вывод такой же как в примере. Почему валидатор не пропускает?
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 findTag = args[0];
String openTag = "<"+findTag;
String closeTag = "</" + findTag + ">";
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
FileReader fileReader = new FileReader(consoleReader.readLine());
consoleReader.close();
BufferedReader fileBufferedReader = new BufferedReader(fileReader);
String tag = "";
String oneString = "";
while(fileBufferedReader.ready()){
oneString+=fileBufferedReader.readLine();
}
ArrayList<Integer> openIndexes = getIndexes(oneString, openTag);
ArrayList<Integer> closeIndexes = getIndexes(oneString, closeTag);
ArrayList<IndexPair> indexPairs = getIndexPairs(openIndexes, closeIndexes);
//printIt(indexPairs);
for(int i=0;i<indexPairs.size()-1;i++){
IndexPair indexPair1 = new IndexPair(indexPairs.get(i));
for(int j=i+1;j<indexPairs.size()-i;j++){
IndexPair indexPair2 = new IndexPair(indexPairs.get(j));
if(indexPair1.getIndex1()> indexPair2.getIndex1()){
indexPairs.set(j, indexPair1);
indexPairs.set(i, indexPair2);
}
}
}
//printIt(indexPairs);
for(IndexPair indexPair : indexPairs){
System.out.println(oneString.substring(indexPair.getIndex1(), indexPair.getIndex2() + closeTag.length()));
}
fileReader.close();
}
public static void printIt(ArrayList<IndexPair> list){
for(IndexPair indexPair : list){
System.out.print(indexPair.getIndex1() + " ");
}
System.out.println();
}
public static Integer getClosestLoewer(Integer k, ArrayList<Integer> arr){ //k индекс из закрывающего
Integer result = 0;
for(int i=0;i<arr.size();i++){
if(arr.get(i)>k)
break;
if(k - result > k - arr.get(i)){
result = arr.get(i);
}
}
return result;
}
public static ArrayList<IndexPair> getIndexPairs(ArrayList<Integer> indexes1, ArrayList<Integer> indexes2){
ArrayList<IndexPair> indexPairs = new ArrayList<>();
for(int i=0;i<indexes2.size();i++){
Integer closest = getClosestLoewer(indexes2.get(i), indexes1);
indexPairs.add(new IndexPair(closest, indexes2.get(i)));
indexes1.remove(closest);
}
return indexPairs;
}
public static class IndexPair{
private int index1, index2;
public IndexPair(int index1, int index2){
this.index1 = index1;
this.index2 = index2;
}
public IndexPair(IndexPair indexPair){
this.index1 = indexPair.getIndex1();
this.index2 = indexPair.getIndex2();
}
public int getIndex1(){
return index1;
}
public int getIndex2(){
return index2;
}
}
public static ArrayList<Integer> getIndexes(String line, String tag){
ArrayList<Integer> indexes = new ArrayList<>();
int index = -1;
while(true){
index = line.indexOf(tag, index+1);
if(index>=0){
indexes.add(index);
}
else
break;
}
return indexes;
}
}