Пробовал на нескольких различных тестовых данных - вроде все работает. Кто-то может подсказать, в чем проблема?
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.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) {
if(args.length == 0){
return;
}
String tagName = args[0];
String fileName = "";
try(
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))
){
fileName = bufferedReader.readLine();
} catch (IOException e){
}
StringBuilder fileContentStringBuilder = new StringBuilder();
try(
BufferedReader bufferedFileReader = new BufferedReader(new FileReader(fileName));
){
while(bufferedFileReader.ready()){
fileContentStringBuilder.append(bufferedFileReader.readLine());
}
} catch (IOException e){
}
Queue<Integer> startAtPos = new LinkedList<>();
Stack<Integer> endAtPos = new Stack<>();
int tempPosAt = -1;
char[] fileCharArr = fileContentStringBuilder.toString().toCharArray();
List<String> tagLines = new ArrayList<>();
for(int i = 0; i < fileCharArr.length; i++){
if(fileCharArr[i] == '<'){
tempPosAt = i;
while(fileCharArr[i] != '>'){
i++;
}
if(fileContentStringBuilder.substring(tempPosAt, i).matches("<[\\s\\w\\\\n\\r]*?" + tagName + "[\\s\\w\\W\\\\n\\r]*?")){
startAtPos.add(tempPosAt);
} else if(fileContentStringBuilder.substring(tempPosAt, i).matches("<[\\s\\\\n\\r]*?/" + tagName + "[\\s\\w\\\\n\\r]*?")){
endAtPos.add(i + 1);
}
}
if(startAtPos.size() == endAtPos.size()){
while(startAtPos.size() != 0){
tagLines.add(fileContentStringBuilder.substring(startAtPos.poll(), endAtPos.pop()));
}
}
}
for(String s: tagLines){
System.out.println(s);
}
}
}