Если есть возможность протестируйте кто нибудь, потому что я уже не знаю где копать...
package com.javarush.task.task19.task1918;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SolutionTest {
    public static void main(String[] args) {
        try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            BufferedReader bufferedReader = new BufferedReader(new FileReader(reader.readLine()))){
            String p = args[0];
            StringBuilder stringBuilder = new StringBuilder();
            List<String> tags = new ArrayList<>();
            List<Integer> index = new ArrayList<>();

            while (bufferedReader.ready()){
                stringBuilder.append(bufferedReader.readLine());
            }

            Pattern pattern = Pattern.compile("<\\/?"+p+">?");
            Matcher matcher = pattern.matcher(stringBuilder);

            while (matcher.find()){
                int start = matcher.start();
                int end = matcher.end();
                String x = stringBuilder.substring(start, end);
                if (x.equals("<"+p)| x.equals("<"+p+">")){
                    tags.add(stringBuilder.substring(start, end));
                    index.add(end);
                } else if (x.equals("</"+p+">")) {
                    tags.add(stringBuilder.substring(start, end));
                    index.add(start);
                }
            }

//            System.out.println(tags);
//            System.out.println(index);

            int countOpen = 0;
            int countClosed = 0;
            for (int x = 0; x < tags.size();){
                if (tags.get(x).equals("<"+p) | tags.get(x).equals("<"+p+">")){
                    countOpen++;
                    x++;
                } else if (tags.get(x).equals("</"+p+">")) {
                    countClosed++;
                    x++;
                } else x++;
                if(countOpen == countClosed & countOpen < 2 & countOpen > 0){
                    System.out.println(tags.get(0)+stringBuilder.substring(index.get(0), index.get(1))+tags.get(1));
                    tags.remove(0); tags.remove(0);
                    index.remove(0); index.remove(0);
                    countOpen = 0; countClosed = 0;
                    x = 0;
                } else if (countOpen == countClosed & countOpen > 1) {
                    System.out.println(tags.get(0)+stringBuilder.substring(index.get(0),
                            index.get(countClosed + countOpen - 1))+tags.get(countClosed + countOpen - 1));
                    tags.remove(countClosed + countOpen - 1); tags.remove(0);
                    index.remove(countClosed + countOpen - 1); index.remove(0);
                    countOpen = 0; countClosed = 0;
                    x = 0;
                }
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}