Считайте с консоли имя файла, который имеет HTML-формат.
Пример:
Info about Leela {span} {b} {span} Turanga Leela
{/span} {/b} {/span} {span} Super {/span} {span} girl {/span}
Первым параметром в метод main приходит тег. Например, «span«.
Вывести на консоль все теги, которые соответствуют заданному тегу.
Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле.
Количество пробелов, n, r не влияют на результат.
Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нет.
Тег может содержать вложенные теги.
Пример вывода:
{span}{span}Turanga Leela{/span}{/b}{/span}
{span}Turanga Leela{/span}
{span}Super{/span}
{span}girl<{/span}
Решение:
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();
FileReader in = new FileReader(fileName);
ArrayList<String> list = new ArrayList<String>();
StringBuffer buffer = new StringBuffer();
while (in.ready()) {
int data = in.read();
buffer.append((char) data);
}
String result = buffer.toString();
in.close();
System.out.println(result);
if (args.length > 0) {
Pattern pattern = Pattern.compile("<(" + args[0] + ")[^>]*?>.*?(<\\1[^>]*?>.*?</\\1>)*.*?</\\1>");
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
System.out.println(matcher.group(0));
String t = matcher.group(2);
if (t != null) System.out.println(t);
}
}
}
}
Вывод:
{span}Super{/span}
{span}girl{/span}
Process finished with exit code 0
Таким образом, почему то не обрабатывается первая группа сбора и не выводится в принципе вот этот кусок
"{span} {b} {span} Turanga Leela {/span} {/b} {/span}"
хотя вроде как должен, уже все перепробовал, никак пока, застрял жестко.. Что могло быть не учтено в регулярном выражении?
package com.javarush.task.task19.task1918;
/*
Знакомство с тегами
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.ByteOrder;
import java.nio.CharBuffer;
import java.util.ArrayList;
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 fileName = reader.readLine();
reader.close();
FileReader in = new FileReader(fileName);
ArrayList<String> list = new ArrayList<String>();
StringBuffer buffer = new StringBuffer();
while (in.ready()) {
int data = in.read();
buffer.append((char) data);
}
String result = buffer.toString();
in.close();
System.out.println(result);
if (args.length > 0) {
Pattern pattern = Pattern.compile("<(" + args[0] + ")[^>]*?>.*?(<\\1[^>]*?>.*?</\\1>)*.*?</\\1>");
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
System.out.println(matcher.group(0));
String t = matcher.group(2);
if (t != null) System.out.println(t);
}
}
}
}
//C:\Users\Tanya\Desktop\files\03bonus
//.*?(<\1[^>]*?>.*?</\1>)