StreamTokenizer, рендеринг HTML-файла?

#java #html #regex #rendering #html-parsing

#java #HTML #регулярное выражение #рендеринг #html-синтаксический анализ

Вопрос:

Я создаю средство визуализации HTML. У меня есть HTML-файл, считываемый в StreamTokenizer. На данный момент он выводит правильные токены, и в моем html-файле укажите мои переменные, заключенные в долларах, например

 <html><p>$myVarToBeRendered$<p></html>
  

Я получаю правильные токены, т.е. Он разделяет тело html и переменные, используя quoteChar(‘$’)

 FileReader in = new FileReader(file); 
     BufferedReader reader = new BufferedReader(in); 
    StreamTokenizer tok;
    tok = new StreamTokenizer(reader);
    tok.resetSyntax();
    tok.wordChars(0, 255); 
    tok.quoteChar('$'); 
  

Я получаю строковые токены

 "<html><p>" , "myVarToBeRendered" and "<p></html>"
  

Хотя при чтении токена мне, очевидно, нужно заменить токен myVar, который идентифицируется как цитата. Этот myVar используется в качестве ключа в хэш-карте, содержащей строковые значения, которые будут отображаться для каждой переменной. Есть ли способ проверить, является ли токен кавычкой? Нравится:

 if (tok.next - is a quote or inside my quotes)
     Then replace this var name with its related HashMap value
  

Я обыскал Интернет и не могу найти никаких примеров или подобных вопросов, которые могли бы мне помочь!

Или любой метод, который я мог бы использовать, чтобы я мог определить, какие токены являются переменными, используемыми в HashMap. Извините, если это не имеет смысла, надеюсь, вы понимаете, что я пытаюсь сделать!!

Большое спасибо, Сэм

Ответ №1:

Возможно, я неправильно понял вопрос, но вы можете проверить наличие ваших токенов на карте, просто вызвав myMap.containsKey(myVarToBeRendered) .

В отдельном примечании я думаю, что использование сопоставления с шаблоном регулярных выражений для извлечения переменных подстановки из вашего html кажется лучшей идеей, чем использование StreamTokenizer.

Комментарии:

1. да, это хорошая идея с использованием клавиши containsKey, я забыл об этом методе!, я собирался использовать регулярное выражение, но это означает сначала загрузку файла в виде строки, а затем проверку?. Мои рассуждения заключались в том, что при загрузке FileStream было бы более эффективно изменять его во время загрузки