Java 保持原始位置偏移时的文本操作

Java 保持原始位置偏移时的文本操作,java,text-processing,Java,Text Processing,我需要在Java中操作大字符串(删除和添加已删除的字符串) 再次,移动字符),但仍然想记住 原始位置偏移。例如,“计算机”一词从偏移量开始 原文中的133,然后移动到位置244,我仍然 想要知道它原来在133号位置的信息。 最难看的(也是最需要资源的)解决方案是为 每个字符都有它的原始位置加上它的位置变化。那里 当然是更好的解决方案,但也更复杂。 有没有好的文本处理库可以解决这个问题 我的问题?我不想重新发明轮子 问候,, Kai您所指的问题正式称为“”与和相关。是计算距离的代码(用Java编写

我需要在Java中操作大字符串(删除和添加已删除的字符串) 再次,移动字符),但仍然想记住 原始位置偏移。例如,“计算机”一词从偏移量开始 原文中的133,然后移动到位置244,我仍然 想要知道它原来在133号位置的信息。 最难看的(也是最需要资源的)解决方案是为 每个字符都有它的原始位置加上它的位置变化。那里 当然是更好的解决方案,但也更复杂。 有没有好的文本处理库可以解决这个问题 我的问题?我不想重新发明轮子

问候,,
Kai

您所指的问题正式称为“”与和相关。是计算距离的代码(用Java编写)。所有的差异代码都在那里,您只需添加跟踪这些步骤的代码,就可以反转它们或跟踪它们。注意:“移动”一个单词或字符将是同时出现的同一单词的删除/插入对


这应该适用于字符、单词和子字符串移动。

这些字符串有多大?考虑到目前可用的内存数量,暴力可能是一条出路


您谈论的是移动单词,但存储字符位置。为什么不存储单词位置和每个单词实例的历史记录呢。请注意,在需要之前,您可以聪明地使用来保存这些对象的多个实例。i、 e.您的“字符串”对象包含一个“计算机”单词对象,但记录该单词出现在位置133、245、667等处(加上您需要的历史记录)

在强调效率之前,先做一个信封背面的计算。当您对这一点感到满意并拥有代码时,您可以使用探查器/秒表进行双重检查


有一个现成的解决方案,以Swing文本的形式出现。它应该可以在Swing上下文之外使用,尽管IIRC它试图在EDT上触发异常(以典型的Swing线程敌对方式)-可能希望对此进行检查。有
位置
对象跟踪
文档中的字符位置
,即使在插入和删除之后也是如此。如果没有别的,它将展示如何做到这一点。大概Apache Harmony实现附带了适合大多数普通人的许可证。

这是为了实现某种撤销/重做功能吗?某种类型的。它是基于EclipseRCP构建的文本分析应用程序的一部分。例如,用户可以选择只查看文档中的重要内容,然后再次查看整个文档。问题在于,文本上方绘制的高亮和图形边缘对文本进行了高度注释。所以记住原始位置很重要,知道在哪里画这些东西。这一点很好,但我认为我不需要计算Levenshtein距离,因为我已经知道编辑了什么。例如,如果文档中的内容被删除,我总是会得到“通知”。是的,这就是我所说的更复杂的解决方案;-)但你是对的,如果没有人能为这项任务提供一个很酷的库,我会走那条路。