I can get the example output.
And for the structure like "<tag> text1 <tag> text2 <tag> text3 </tag> </tag></tag>", the output of my code is like
"<tag> text1 <tag> text2 <tag> text3 </tag> </tag></tag>
<tag> text2 <tag> text3 </tag> </tag>
<tag> text3 </tag>"
It's hard for myself to figure out the problems. Hope someone could help me out.
Appreciate it!
package com.codegym.task.task19.task1918;
import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.ArrayList;
/*
Introducing tags
*/
public class Solution {
public static void main(String[] args) throws Exception{
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String fileName=reader.readLine();
reader.close();
FileReader file=new FileReader(fileName);
BufferedReader filereader=new BufferedReader(file);
String s="";
String content="";
while((s=filereader.readLine())!=null){
content+=s;
}
filereader.close();
ArrayList<String> result=new ArrayList<>();
Deque<Integer> temp_op=new ArrayDeque<>();
Deque<Integer> deque_op = new ArrayDeque<>();
Deque<Integer> deque_en = new ArrayDeque<>();
int curr_index=0;
int tabLength=args[0].length();
while(true){
int temp=content.indexOf(args[0],curr_index+1);
if(temp==-1) {break;}
curr_index=temp;
if(content.substring(temp-1,temp).equals("/")){
deque_en.push(new Integer(temp+tabLength+1));
deque_op.push(temp_op.pop());
}else{
temp_op.push(new Integer(temp-1));
}
}
while(!deque_op.isEmpty()&&!deque_en.isEmpty()){
Integer op=deque_op.pop();
Integer en=deque_en.pop();
String ss=content.substring(op.intValue(),en.intValue());
result.add(ss);
}
for(int j=1;j<result.size();j++) {
String key=result.get(j);
int k=j-1;
while(k>=0&&(key.length()<result.get(k).length()&&result.get(k).contains(key))) {
result.set(k+1,result.get(k));
k--;
}
result.set(k+1, key);
}
int arrayLastIndex=result.size()-1;
for(int i=arrayLastIndex;i>=0;i--){
System.out.println(result.get(i));
}
}
}