Выведите строки, содержащие закрывающие теги html

1

Поэтому у меня есть txt файл, содержащий источник html-страницы (без css, без объявления html5, без js, только html-тегов). Я должен вывести индекс этих строк, содержащий хотя бы закрывающий тег html. Он должен использовать регулярное выражение. Я знаю, как искать закрывающие теги, но не знаю, как их индексировать. Моя первая идея заключалась в том, чтобы разбить исходный код на новый символ строки "\n". Но тогда я должен скомпилировать помощник в каждой строке. Есть ли другой метод? Благодарю!

  • 0
    Вам не нужно компилировать совпадение каждой строки. Также вы можете соответствовать весь текст
  • 0
    Вы выиграли сегодняшний джекпот! stackoverflow.com/a/1732454/106261
Теги:
string

3 ответа

3
Лучший ответ

Или со сканером:

Pattern p = Pattern.compile("</[^>]+>");
Scanner s = new Scanner(new BufferedReader(new FileReader("input.txt")));

for (int lineNum=1; s.hasNext(); lineNum++) {
      Matcher m = p.matcher(s.next());
            if(m.find()){
              System.out.println(lineNum);
            }

}
  • 0
    Хорошо. Большое спасибо!
1

Вот пример, который читает каждую строку файла и выводит, если есть закрытый тег. Я использую BufferedReader для чтения файла строки за строкой (как описано в этом вопросе), а затем посмотрите, какая строка содержит шаблон.

ОБНОВЛЕНИЕ 1

Как указано выше, вы не должны использовать regex для анализа вашего файла. Если вы хотите сделать это, вы можете, например, использовать JSoup. Однако, если вы только хотите сделать то, что вы описали в своем вопросе, регулярное выражение в порядке.

package main;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class GetClosedTagsOfFile {
    public static void main(String[] args) throws IOException {
        // Open the file.
        FileInputStream fis = new FileInputStream("test.html");
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));

        // Compile pattern.
        Pattern p = Pattern.compile("</[^>]+>");

        // Read the file.
        String strLine;
        int i = 0;
        while ((strLine = br.readLine()) != null)   {
            i++;

            // Check if there is a closing tag.
            Matcher m = p.matcher(strLine);
            if(m.find())
                System.out.println("Line " + i + " contains a closing tag.");
        }

        // Close the input stream.
        fis.close();
        br.close();
    }
}
  • 0
    Я не могу использовать внешние библиотеки Java, я должен использовать регулярные выражения. Спасибо за ваш ответ!
  • 0
    @CalanceaBogdan: Мой ответ не использует никаких внешних библиотек Java. JSoup был только дополнительной подсказкой.
0

Разделение исходного кода является одним из вариантов, вам не нужно компилировать каждую строку. Другой вариант - найти совпадения, а затем начать подсчет символов новой строки между ними.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню