Если есть возможность протестируйте кто нибудь, потому что я уже не знаю где копать...
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();
}
}
}
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 Solution {
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++;
}
if(countOpen == countClosed & countOpen < 2 & countOpen > 0){
System.out.println("<"+p+">"+stringBuilder.substring(index.get(0), index.get(1))+"</"+p+">");
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))+"</"+p+">");
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();
}
}
}