Да, regex)) Но на тех тестах, что нашел/придумал - работает. Подскажите тест, на котором выведет неверно?
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.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String filename = br.readLine();
br.close();
String teg = args[0];
StringBuffer fileLines = new StringBuffer();
FileReader file = new FileReader(filename);
while (file.ready()){
fileLines.append((char)file.read());
}
file.close();
findTeg(fileLines, teg);
}
public static void findTeg(CharSequence line, String teg){
StringBuffer fileLines = new StringBuffer(line.toString().replaceAll("\n", " ").replaceAll("\r", " ") );
Pattern p2 = Pattern.compile("< ");
Matcher m2 = p2.matcher(fileLines);
while (m2.find()) {
fileLines = new StringBuffer(m2.replaceAll("<"));
m2 = p2.matcher(fileLines);
}
p2 = Pattern.compile(" >");
m2 = p2.matcher(fileLines);
while (m2.find()) {
fileLines = new StringBuffer(m2.replaceAll(">"));
m2 = p2.matcher(fileLines);
}
Pattern p = Pattern.compile("< */? *"+teg+"\\b *[^/]*?>");
Matcher m = p.matcher(fileLines);
byte deep=0;
int start = 0;
while(m.find()) {
String s = m.group(0);
if (!"</".equals(s.replaceAll(" ", "").substring(0,2))){
deep++;
if(deep==1) start = m.start();
}
if ("</".equals(s.replaceAll(" ", "").substring(0,2))){
deep--;
if(deep==0){
System.out.println(fileLines.substring(start, m.end()));
findTeg(fileLines.substring(start, m.end()).subSequence(1, fileLines.substring(start, m.end()).length()-1), teg);
}
}
}
}
}