2010-09-14 8 views
1

Je veux traiter une chaîne, dans laquelle je veux trouver plusieurs chaînes, je suis en train de faire quelques surligneur dans le texte html en Java ..
Exemple:
phrases Trouvez et processus table, row, primary key dans Each table row contains a primary key column
Le texte est texte html avec des balises comme <b>,<img..>...
s'il y a une balise ignorable dans le milieu de la phrase pour ex. primary <b>key</b> (balise ignorable est l'étiquette qui n'interrompt pas le texte signifiant comme <b> ou <i>, d'autre part l'étiquette comme <div> interrompt le sens du texte) la phrase peut être remplacée.
Si une phrase est une sous-phrase d'une autre phrase, la plus longue a une priorité plus élevée. par ex. la recherche de table row et row contains dans le texte mentionné le deuxième devrait être proccesedLe meilleur moyen de trouver plusieurs phrases dans la chaîne?

Ma première était pseudocode somethin comme ceci:

for (each phrase) 
    while(tex.hasNext(phrase)) do 
    processPhraseInText(text,phrase) 
    end-while 
end-for 

Il travaillait, mais le texte a été traversé phrases.count() fois Je cherche un moyen plus rapide de traiter tous les prases à la fois

Je veux essayer l'expression régulière et pattern-matcher à utiliser dans cela.
je suis venu avec deux façons, 1. créer une expression régulière pour toutes les phrases qui cherchent en quelque sorte comme ceci: regex1|regex2|..|regexN ou 2. de créer pour chaque phrase une expression rationnelle (et un objet matcher)

ce pourrait être le meilleur moyen? ou existe-t-il une manière totalement différente ou une bibliothèque existante pour ceci? n'est pas la deuxième voie avec de nombreux allumeurs la même chose que la solution que j'ai déjà?

Répondre

0

Si vous faites une regex pour chaque phrase, vous devez encore faire une boucle sur le texte plusieurs fois.

Si vous créez une expression régulière regex1|regex2|..|regexN, vous pouvez effectuer une recherche dans le texte en une passe. Ce serait plus rapide avec beaucoup de phrases.

+0

Merci, vous me assuré :) pourriez-vous me dire, si une aproche matcher sera plus rapide en général que la sollution je l'ai déjà? J'utilise maintenant indexOf pour chaque phrase, le pseudocode simple est posté, je sais que ce n'est pas beaucoup – Zavael

+1

Vous devez profiler si c'est à propos de la performance. Je pense que j'ai lu quelque part que les alternatives dans RegEx sont assez lentes, mais je ne suis pas un gourou RegEx. – atamanroman

0

Vous pouvez facilement le faire en un seul passage. Vous n'avez pas besoin de mots-clés, puisque HTML est un langage basé sur des tags, mais disons que vous vouliez colorier en fonction de mots-clés.

Stockez tous vos mots-clés dans un Trie

Foreach character 
    If character is not < send to output 
    If character is < 
     Read until you get > (or ' ' if you want to deal with attributes too) 
     If prefix is in Trie, colour appropriately and add to output 
+0

peut-être que je n'ai pas compris, mais si avec les mots-clés vous vouliez dire mes phrases, que j'ai besoin d'eux, parce que je veux mettre en évidence les phrases, pas les balises html – Zavael

Questions connexes