Последний пункт. На компе работает
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.HashMap;
/*
Знакомство с тегами
*/
public class Solution {
public static HashMap<Integer,String> solution = new HashMap<Integer,String>();
public static String openTag=null,closeTag=null;
public static int sequence=0;
public static void main(String[] args) {
try{
//System.out.println("<span ".matches("<span([>]|[\\s])"));
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String fileName=r.readLine();
r.close();
String tag=args[0];
BufferedReader forRead = new BufferedReader(new FileReader(fileName));
StringBuffer data = new StringBuffer("");
String read=null;
while((read=forRead.readLine())!=null)
data.append(read);
forRead.close();
openTag="<"+tag;closeTag="</"+tag+">";
searchTag(new StringBuilder(data.toString()));
for(Integer current: solution.keySet()){
System.out.println(solution.get(current));
}
}catch(IOException e){}
}
public static int searchTag(StringBuilder str){
int start=0,end=0;
int mySequence = sequence++;
if (mySequence==0)
for(int i=0;i<str.length()-(openTag.length()-1+1);i++){ //удаляю лишние символы в начале строке
if(str.substring(i,i+openTag.length()+1).matches(openTag+"([\\s]|[>])"))
{str = new StringBuilder(str.substring(i));break;}
}
for (int i=openTag.length()-2;i<str.length()-(closeTag.length()-1)&&i<str.length();i++){
// if(i==openTag.length()-2)
if(str.substring(i+1,(i+1)+openTag.length()+1).matches(openTag+"([\\s]|[>])"))
{i=i+searchTag(new StringBuilder(str.substring(i+1)));}
if(str.substring(i,i+closeTag.length()).matches(closeTag)){
end=i+closeTag.length();
solution.put(mySequence,str.substring(start,end));
if(mySequence!=0)return end-1;
else {break;}
}
}
str=new StringBuilder(str.substring(end));
for (int i=0;i<=str.length()-((openTag+closeTag).length());i++)
if(str.substring(i,(i)+openTag.length()+1).matches(openTag+"([\\s]|[>])"))
{ str=new StringBuilder(str.substring(i));
int newStart = searchTag(str);
str = new StringBuilder(str.substring(newStart+1)); i--;}
return 0;
}
}