Приветствую, несколько дней уже решаю эту задачу. Несколько раз уже переписывал ее с нуля. На данный момент все работает корректно, не смог найти ни одного примера чтоб не правильно отрабатывало. Дайте пожалуйста примеров чтоб увидеть где ошибка. Спасибо.
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Solution {
public static void main(String[] args) throws IOException {
ArrayList<String> arrayList = new ArrayList();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileContent = "";
//String filePatch = "C:\\java_test\\1.txt";
String filePatch = reader.readLine();
reader.close();
reader = new BufferedReader(new FileReader(filePatch));
while (reader.ready()) {
fileContent += reader.readLine() + System.lineSeparator();
}
fileContent = fileContent.substring(0,fileContent.length()-2); //-1 length()-2
boolean flag = false;
String tmp = "";
for (int i = 0; i < fileContent.length(); i++){
String currentSymbol = fileContent.substring(i,i+1);
if (currentSymbol.matches("<")){
flag = true;
}
if (currentSymbol.matches(">")){
flag = false;
}
if (currentSymbol.matches("\n|\r")){
if (flag == true){
tmp += " ";
i++;
}
else {
tmp += "";
i++;
}
}
else {
tmp += currentSymbol;
}
}
fileContent = tmp;
//fileContent = fileContent.replaceAll(System.lineSeparator(),""); // " "
reader.close();
TagFinder(fileContent,arrayList);
TagComparator (arrayList,args[0]);
}
public static void TagFinder (String fileContent, ArrayList list){
int counter = 0;
int maxCounter = 0;
int startPosition =0;
int endPosition;
for (int i = 0; i < fileContent.length();i++){
if (fileContent.substring(i,i+1).equals("<")){
if (fileContent.substring(i+1,i+2).equals("/")){
counter--;
if (counter == 0){
while (!fileContent.substring(i,i+1).equals(">")){
i++;
}
endPosition = i+1;
String tag = fileContent.substring(startPosition,endPosition);
list.add(tag);
maxCounter --;
while (maxCounter != 0){
String tmpTag = tag.substring(1,tag.length());
counter = 0;
for (int w = 0; w < tmpTag.length(); w++){
if (tmpTag.substring(w,w+1).equals("<")){
if (tmpTag.substring(w+1,w+2).equals("/")){
counter --;
if (counter==0){
while (!tmpTag.substring(w,w+1).equals(">")){
w++;
}
endPosition = w+1;
list.add(tmpTag.substring(startPosition,endPosition));
maxCounter --;
tag = tmpTag.substring(startPosition,endPosition);
}
}
else {
counter++;
if (counter == 1){
startPosition = w;
}
}
}
}
}
counter = 0; // Просто не спрашивай почему
}
}
else {
counter++;
maxCounter++;
if (counter==1){
startPosition = i;
}
}
}
}
}
public static void TagComparator (ArrayList <String> arrayList, String arg){
for (String i : arrayList){
String tag = "";
for (int w = 1; w < i.length(); w++){
while (!i.substring(w,w+1).matches(">| ")){
tag+=i.substring(w,w+1);
w++;
}
if (tag.equals(arg)){
System.out.println(i);
}
}
}
}
}


