#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 было бы более эффективно изменять его во время загрузки