Все примеры проходят.
Пробелы в тегах удаляю, больше мыслей нет.
package com.javarush.task.task19.task1918;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
/*
Знакомство с тегами
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
String fileContent = "";
while (fileReader.ready()) {
fileContent += fileReader.readLine();
}
fileReader.close();
fileContent = fileContent.replaceAll("<\\s", "<");
fileContent = fileContent.replaceAll("\\s>", ">");
ArrayList<Integer> startIndex = new ArrayList<>();
ArrayList<Integer> endIndex = new ArrayList<>();
ArrayList<String> strings = new ArrayList<>();
String find = args[0];
int startWith = 0;
while (true) {
int position = fileContent.indexOf("<"+find, startWith);
if (position == -1)
break;
else {
startIndex.add(position);
startWith = ++position;
}
}
startWith = 0;
while (true) {
int position = fileContent.indexOf("</"+find+">", startWith);
if (position == -1)
break;
else {
endIndex.add(position);
startWith = ++position;
}
}
/*
System.out.println("startIndex");
printList(startIndex);
System.out.println("endIndex");
printList(endIndex);
*/
int firstIndex = 1;
int lastIndex = 0;
while (startIndex.size() != 0)
{
if (startIndex.size() > 1)
{
if (startIndex.get(firstIndex) < endIndex.get(lastIndex))
{
firstIndex++;
} else
{
lastIndex = getLastIndex(endIndex, startIndex.get(firstIndex));
strings.add(fileContent.substring(startIndex.get(0), endIndex.get(lastIndex) + find.length() + 3));
startIndex.remove(0);
endIndex.remove(lastIndex);
firstIndex = 1;
lastIndex = 0;
}
} else {
strings.add(fileContent.substring(startIndex.get(0), endIndex.get(0) + find.length() + 3));
startIndex.remove(0);
endIndex.remove(0);
}
}
//System.out.println("size= " + strings.size());
for (String x : strings) System.out.println(x);
}
public static int getLastIndex(ArrayList<Integer> list, int value)
{
int result = -1;
for (int i = 0; i < list.size(); i++) {
if (value > list.get(i))
result = i;
else
break;
}
return result;
}
/*
public static void printList(ArrayList<Integer> list) {
for (Integer element : list ) {
System.out.println(element);
}
}*/
}