Hi all,
I'm not sure why can't pass last test. When i'm checking it on my computer, everything works just like it should be IMHO. I would appreciate any help. Thanks!
package com.codegym.task.task19.task1918;
/*
Introducing tags
*/
import java.io.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
static ArrayList<Integer> openingList = new ArrayList<Integer>();
static ArrayList<Integer> closingList = new ArrayList<Integer>();
public static void main(String[] args) throws IOException {
String tag = args[0];
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = bufferedReader.readLine();
bufferedReader.close();
BufferedReader fileBuffer = new BufferedReader(new FileReader(fileName));
StringBuilder fileText = new StringBuilder();
while (fileBuffer.ready()) {
fileText.append(fileBuffer.read());
}
fileBuffer.close();
String text = fileText.toString().replaceAll("\n", "");
String openingTag = "<" + tag;
String closingTag = "</" + tag + ">";
Pattern patterOpening = Pattern.compile(openingTag);
Pattern patternClosing = Pattern.compile(closingTag);
Matcher openingMatcher = patterOpening.matcher(text);
Matcher closingMatcher = patternClosing.matcher(text);
while (openingMatcher.find()) {
openingList.add(openingMatcher.start());
}
while (closingMatcher.find()) {
closingList.add(closingMatcher.start());
}
int tagsCount = 0;
int textStart = 0;
int textEnd = 0;
int closingTagLength = closingTag.length();
boolean keepAnalyzing = openingList.size() > 0;
StringBuilder result = new StringBuilder();
while (keepAnalyzing) {
if(openOrClose()==TagType.OPENING){
if(tagsCount == 0){
textStart = openingList.get(0);
}
openingList.remove(0);
tagsCount++;
}else{
tagsCount--;
if(tagsCount==0){
textEnd = closingList.get(0)+closingTagLength;
result.append(text.substring(textStart, textEnd)+"\n");
}
closingList.remove(0);
}
keepAnalyzing = closingList.size()>0;
}
System.out.println(result);
}
public static TagType openOrClose(){
if(openingList.size() == 0 || openingList.get(0)>closingList.get(0)){
return TagType.CLOSING;
}
return TagType.OPENING;
}
public static enum TagType {
OPENING,
CLOSING,
}
}