2015-03-24 3 views
1

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

+0

вам не придется компилировать сличитель каждую строку. также u может соответствовать всему тексту – eduyayo

+0

вы выиграли сегодняшний джекпот! http://stackoverflow.com/a/1732454/106261 – NimChimpsky

ответ

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

Хорошо. Большое спасибо! –

0

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

1

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

UPDATE 1

Как выше комментарий сказали, что вы не должны использовать регулярное выражение для разбора файла. Если вы хотите это сделать, вы можете, например, использование 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 был лишь дополнительным намеком. – Rolch2015

Смежные вопросы