Question

Je dois manipuler de grandes chaînes en Java (suppression et l'ajout de la suppression carbonise à nouveau, les caractères se déplacer), mais encore envie de se rappeler la décalages de position d'origine. Par exemple. le mot « ordinateur » commence à l'offset 133 dans le texte original et est ensuite déplacé à la position 244, je reste veulent l'information qui était à l'origine à la position 133. La plus laide solution (et gourmand en ressources) serait de stocker pour chaque caractère de sa position d'origine, plus il est le changement de position. Là sont sûrement meilleures solutions, mais aussi plus complexes. Y a-t-il des bonnes bibliothèques de manipulation de texte qui ont une solution mon problème? Je ne veux pas réinventer la roue.

Cordialement, Kai

Était-ce utile?

La solution

Quelle sont ces chaînes? Compte tenu des quantités de mémoire disponible aujourd'hui, la force brute peut être le chemin à parcourir.

Vous parlez de mots en mouvement, mais le stockage des positions de caractères. Pourquoi ne pas stocker les positions de mot, et une histoire par exemple de mot. Notez que vous pouvez être intelligent et utiliser modèle poids mouche pour éviter d'avoir plusieurs instances de ces objets jusqu'à ce que vous avez besoin. à-dire votre objet « string » contient un objet mot « ordinateur », mais enregistre que ce mot se produit à la position 133, 245, 667, etc. (plus l'histoire comme et quand vous en avez besoin)

Autres conseils

Le problème dont vous parlez est officiellement appelé « correction chaîne à chaîne problème "qui est lié à Delta encodage et Levenshtein . est le code pour calculer la distance (il est en Java). Tout le code est là differentiation, il vous suffit d'ajouter du code qui permet de suivre les étapes afin que vous puissiez les renverser ou les suivre. Remarque:. « Déplacer » un mot ou un caractère serait une paire delete / insert du même mot qui se produit ensemble

Cela devrait fonctionner à la fois le caractère, mot, et se déplace sous-chaîne.

Avant d'arriver à souligner sur l'efficacité, faire un retour d'un calcul d'enveloppe. Lorsque vous êtes d'accord avec cela et avoir le code, vous pouvez vérifier auprès d'un profileur / chronomètre.

Il existe une solution toute faite sous la forme de texte Swing. Il devrait être utilisable en dehors d'un contexte de Swing, bien que IIRC il tente de tirer des exceptions à l'EDT (la manière de fil hostile swing typique) - pourrait vouloir vérifier. Il y a des objets Position qui gardent la trace des positions de caractère dans un Document même après des insertions et des suppressions. Si rien d'autre, il va montrer comment il peut être fait. On peut supposer que la mise en œuvre Apache Harmony est livré avec une licence appropriée pour la plupart des gens normaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top