Здравствуйте!
Пример отрабатывает нормально, но валидатор не принимает решение. Подскажите, где я ошибся?
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import com.sun.org.apache.xerces.internal.impl.xpath.regex.Match;
import com.sun.org.apache.xerces.internal.impl.xs.identity.Selector;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
private static boolean containOpenTeg(String substr, String oTag){
Pattern p = Pattern.compile(oTag);
Matcher m = p.matcher(substr);
return m.find();
}
public static void main(String[] args) throws IOException {
String oTag = "<"+args[0]+"([^...&&[^</]]*)>";
String cTag = "</"+args[0]+">";
//Регулярки
Pattern pStart = Pattern.compile(oTag);
Pattern pStop = Pattern.compile(cTag);
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
String fileName = rd.readLine();
rd.close();
rd = new BufferedReader(new FileReader(fileName));
String text = null;
StringBuilder sb = new StringBuilder();
while (rd.ready()){
sb.append(rd.readLine());
}
text = sb.toString();
rd.close();
Matcher mStart = pStart.matcher(text);
Matcher mStop = pStop.matcher(text);
//Позиции открывающего тега
int iOpenTag = 0;
int jOpenTag = 0;
//Позиции закрывающего тега
int iCloseTag = 0;
int jCloseTag = 0;
ArrayList<Integer> iOpenTags = new ArrayList<>();
ArrayList<Integer> jCloseTags = new ArrayList<>();
while (mStart.find(jCloseTag) && mStop.find(jCloseTag)){
//Получаем позиции открвающего тега
iOpenTag = mStart.start();
jOpenTag = mStart.end();
//То же самое для закрывающего тега
iCloseTag = mStop.start();
jCloseTag = mStop.end();
String subst = text.substring(jOpenTag,jCloseTag);
iOpenTags.add(iOpenTag);
jCloseTags.add(jCloseTag);
while (containOpenTeg(subst,oTag)){
mStart.find(mStart.end());
mStop.find(mStop.end());
iOpenTags.add(mStart.start());
jCloseTags.add(0,mStop.end());
subst = text.substring(mStart.end(),mStop.end());
}
jCloseTag = mStop.end();
for (int i = 0; i < iOpenTags.size(); i++) {
subst = text.substring(iOpenTags.get(i),jCloseTags.get(i));
System.out.println(subst);
}
iOpenTags.clear();
jCloseTags.clear();
}
}
}