Задачу решил.
Программа работает.
Протестировал на множестве различных примеров.
Но вали не пропускает.
Видимо какие-то теги все-таки не отлавливаются.
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine(); // c:/JAVA/test.txt
reader.close();
StringBuilder str = new StringBuilder();
BufferedReader reader2 = new BufferedReader(new FileReader(fileName));
while (reader2.ready()) {
str.append(reader2.readLine());
}
reader2.close();
String s = str.toString();
String[] m = new String[s.length()];
String point = "";
for (int i = 0; i < s.length() - 5; i++) {
point = s.substring(i, i + 6);
if (point.equals("<"+args[0]+" ") || point.equals("<"+args[0]+">")) m[i] = "(";
if (point.equals("<"+args[0]+"\n") || point.equals("<"+args[0]+"\n\r")) m[i] = "(";
//if (point.equals("<"+args[0]+"\r") || point.equals("<"+args[0]+"\r\n")) m[i] = "(";
if (point.equals("<"+args[0]+" "+"\n") || point.equals("<"+args[0]+" "+"\n\r")) m[i] = "(";
//if (point.equals("<"+args[0]+" "+"\r") || point.equals("<"+args[0]+" "+"\r\n")) m[i] = "(";
if (point.equals("</"+args[0]))m[i]=")";
}
for (int i = 0; i < m.length; i++){
if (m[i]==null)m[i]="*";
}
for (int i = 0; i < m.length; i++){
if (m[i].equals(")")){
for (int n = i; n >= 0; n--){
if (m[n].equals("(")){m[n]=m[n]+i;break;}
}
}
}
for (int i = 0; i < m.length; i++){
if (!(m[i].equals("*"))&& !(m[i].equals(")"))){
int start = i;
int end = Integer.parseInt(m[i].substring(1))+args[0].length()+3;
//System.out.println(start+" "+end);
String text = s.substring(start,end);
System.out.println(text);
}
}
}
}