StreamTokenizer, een html-bestand renderend?

Ik maak een HTML-renderer. Ik heb het HTML-bestand laten inlezen in een StreamTokenizer. Op dit moment worden de juiste tokens afgedrukt en in mijn html-bestand geef ik mijn varbiles op die zijn ingesloten in dollars, bijvoorbeeld

<html>
$myVarToBeRendered$
</html>

Ik krijg de juiste tokens, d.w.z. het splitst het html-lichaam en vars op met behulp van 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('$'); 

Ik krijg de tekenreeksen

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

Hoewel ik bij het lezen van het token uiteraard het myVar-token moet vervangen dat als een quote is geïdentificeerd. Deze myVar wordt gebruikt als een sleutel in een HashMap die de reekswaarden bevat die voor elke variabele moeten worden weergegeven. Is er een manier om te controleren of een token een citaat is? net zoals:

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

Ik heb het internet doorzocht en kan geen voorbeelden of vergelijkbare vragen vinden om me te helpen!

Of elke methode die ik zou kunnen gebruiken, zodat ik kan identificeren welke tokens variabelen zijn die in de HashMap worden gebruikt. Sorry als dit geen steek houdt, ik hoop dat je begrijpt wat ik probeer te doen !!

Veel dank, Sam

0

1 antwoord

Misschien heb ik de vraag verkeerd begrepen, maar je kunt de aanwezigheid van je tokens op een kaart controleren door simpelweg myMap.containsKey (myVarToBeRendered) aan te roepen.

Op een aparte noot lijkt het gebruik van Regex Pattern Matching om substitution vars uit je html te extraheren een beter idee dan het gebruik van StreamTokenizer.

1
toegevoegd
yah, dat is een goed idee met de containsKey, ik ben die methode vergeten! Ik wilde regex gebruiken, maar het betekent dat je het bestand eerst als een string laadt en dan controleert ?. Mijn redenering was dat het laden van de FileStream efficiënter zou zijn om hem aan te passen tijdens het laden
toegevoegd de auteur Sam Palmer, de bron
Proost heeft het net geprobeerd en werkte prachtig :)
toegevoegd de auteur Sam Palmer, de bron
dat is geweldig! :)
toegevoegd de auteur mazaneicha, de bron