Здравствуйте.
Бьюсь больше дня над задачей. Не знаю уж, насколько это говнокод :) , но пытался решать только пройденным материалом.
Вкратце решение такое: считываем файл построчно, объединяем в одну строку, меняем все теги на открывающие и закрывающие скобки соответственно.
Переводим полученную строку в массив символов.
Проходим циклом по массиву, если находим открывающую скобку, то запускаем подцикл со следующего элемента, пока не найдем закрывающую скобку. Если вдруг находим вторую подряд открывающую, то ищем не следующую, а вторую закрывающую итд. Каждый элемент до нахождения скобки заносим в StringBuilder.
Как только находим нужную закрывающую скобку, выходим из подцикла и заносим полученную из StringBuilder строку в лист строк с добавлением тегов в начало и конец строки.
Какие только теги не выдумывал в исходном файле, вывод правильный. Валидатору не нравится последний пункт.
Укажите, пожалуйста, на ошибку.
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.Arrays;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader fileNameReader = new BufferedReader(new InputStreamReader(System.in));
String file = fileNameReader.readLine();
fileNameReader.close();
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuilder sb = new StringBuilder();
while (reader.ready()) {
sb.append(reader.readLine());
}
reader.close();
String tag1 = "<" + args[0];
String tag2 = "</" + args[0] + ">";
String str = sb.toString().replaceAll(tag1, "(").replaceAll(tag2, ")");
char[] list = str.toCharArray();
ArrayList<String> strings = new ArrayList<>();
for (int i = 0; i < list.length; i++) {
if (list[i] == '(') {
StringBuilder sbb = new StringBuilder();
if (list[i + 1] != '>' && list[i + 1] != ' ') {
sbb.append(' ');
}
int count = 0;
for (int j = i + 1; j < list.length; j++) {
if (list[j] == '(') {
sbb.append(tag1);
count++;
}
else if (list[j] != ')') {
sbb.append(list[j]);
}
else if (list[j] == ')' && count != 0) {
sbb.append(tag2);
count--;
}
else if (list[j] == ')' && count == 0) {
break;
}
}
strings.add(tag1 + sbb.toString() + tag2);
}
}
for (String s : strings) {
System.out.println(s);
}
}
}