Помимо примера, который парсится как надо, пробовал другие теги с пробелами
Или еще нужно форматировать, чтобы не было пробелов?
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
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) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name1 = reader.readLine();
reader.close();
BufferedReader reader1 = new BufferedReader(new FileReader(name1));
StringBuilder str = new StringBuilder();
List<Integer>listOpening = new ArrayList<>();
List<Integer>listClosing = new ArrayList<>();
String temp = "";
String[] arr;
while (reader1.ready()) {
str.append(reader1.readLine());
}
Pattern pattern = Pattern.compile("<" + args[0] + ".+</" + args[0]);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(str.substring(matcher.start()));
temp = str.substring(matcher.start());
}
Pattern pOpening = Pattern.compile("<" + args[0]);
Matcher matcher2 = pOpening.matcher(temp);
while (matcher2.find()){
listOpening.add(matcher2.start());
System.out.println(matcher2.start()+" open");
}
Pattern pClosing = Pattern.compile("</" + args[0]);
Matcher matcher3 = pClosing.matcher(temp);
while (matcher3.find()){
listClosing.add(matcher3.start());
System.out.println(matcher3.start()+" close");
}
for (int i=0;i<listOpening.size();i++){
if (i<listOpening.size()-1) {
if (listOpening.get(i) < listClosing.get(i) && listOpening.get(i + 1) < listClosing.get(i)) {
System.out.println(temp.substring(listOpening.get(i), listClosing.get(i + 1) + 3 + args[0].length()));
System.out.println(temp.substring(listOpening.get(i + 1), listClosing.get(i) + 3 + args[0].length()));
i++;
} else {
System.out.println(temp.substring(listOpening.get(i), listClosing.get(i) + 3 + args[0].length()));
}
} else {
System.out.println(temp.substring(listOpening.get(listOpening.size()-1),listClosing.get(listClosing.size()-1)+3+args[0].length()));
}
}
reader1.close();
}
}