Поэтому у меня есть txt файл, содержащий источник html-страницы (без css, без объявления html5, без js, только html-тегов). Я должен вывести индекс этих строк, содержащий хотя бы закрывающий тег html. Он должен использовать регулярное выражение. Я знаю, как искать закрывающие теги, но не знаю, как их индексировать. Моя первая идея заключалась в том, чтобы разбить исходный код на новый символ строки "\n". Но тогда я должен скомпилировать помощник в каждой строке. Есть ли другой метод? Благодарю!
Или со сканером:
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);
}
}
Вот пример, который читает каждую строку файла и выводит, если есть закрытый тег. Я использую 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();
}
}
Разделение исходного кода является одним из вариантов, вам не нужно компилировать каждую строку. Другой вариант - найти совпадения, а затем начать подсчет символов новой строки между ними.