Вот такой костыль правильно работает с примером из условия задачи.
Но валидацию не принимает скорее всего из-за неуниверсальности ?
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file = reader.readLine();
reader.close();
StringBuilder builder = new StringBuilder();
BufferedReader reader1 = new BufferedReader(new FileReader(file));
while (reader1.ready()) {
builder.append(reader1.readLine());
}
reader1.close();
String s = builder.substring(builder.indexOf("<"));
builder.setLength(0);
String parseMain = args[0].substring(1);
String openCase1 = "<" + parseMain;
String openCase2 = "<" + parseMain + ">";
String closeCase1 = "</" + parseMain + ">";
String closeCase2 = "></" + parseMain + ">";
if (!args[0].equals("-CDATA")) {
while (s.length() != 0) {
String result;
if (s.startsWith(openCase2)) {
result = s.substring(0, s.indexOf(closeCase1));
result += closeCase1;
builder.append(result).append("\n");
s = s.replaceAll(result, "");
} else if (s.startsWith(openCase1)) {
result = s.substring(0, s.indexOf(closeCase2));
result += closeCase2;
builder.append(result).append("\n");
s = s.replaceAll(result, "");
result = result.substring(result.lastIndexOf("<" + parseMain + ">"), result.indexOf("</" + parseMain + ">"));
result += closeCase1;
builder.append(result).append("\n");
}
}
}
System.out.println(builder.toString());
}
}