上下文:
我有一个文本文档,其中突出显示了一些句子。为了找到突出显示的部分,我有一个列表,其中包含突出显示部分的开始和停止位置。要获得突出显示的部分,可以轻松使用Java的Buttons
方法。但是,获取非突出显示的部分非常棘手。
问题:
我的最终目标是对文档中的文本进行标记,然后为每个标记指定标签,或者突出显示。因此,我最终需要的是有两个列表:1-一个包含突出显示的文本块的列表,另一个包含未突出显示的文本块的列表。然后,我会简单地在每个列表中单独标记每个块。
我面临的问题是找到一个干净的算法来提取非突出显示的文本块。正如我所说,获得突出显示的块很容易,因为你已经有了它们的开始和结束位置,你可以使用Java的string.substring(start, stop)
方法。
例如:
string.substring(start, stop)
因此,未突出显示的文本块列表应包含:
1 - This is a simple text, **this part is highlighted**, this part is not but **this is also highlighted,** but this one is also not.
2- This is a simple text,
3- , this part is not but
我的方法:
我解决这个问题的方法是将突出显示部分的开始和结束位置添加到哈希表中,其中起始位置是键,值是结束位置。然后我开始逐个字符地阅读文本文档并检查当前字符的位置是否是哈希表中的键,如果是,我将所有已读取的字符视为非突出显示的文本块并将其添加到非突出显示的文本块列表。
然而,我发现我的方法有点难看,我想知道是否有更好的方法来做到这一点。我不擅长字符串算法,并认为可能有更好的方法。
所以我的问题:是否有更好的方法来查找未突出显示的文本块?
答案 0 :(得分:1)
将所有突出显示位置放在列表中,然后按起始位置对其进行排序。对于除最后一个之外的列表中的每个突出显示,有一个非突出显示的区域从该突出显示的结束位置开始,并在后续突出显示的开始位置结束。此外,除非第一个开始位置为0,否则会有一个从0到第一个开始的非高亮显示区域,并且类似于最后一个高亮区域。
(这假设没有重叠的高光 - 如果有,你首先需要浏览列表并合并重叠的高光。你可以通过检查一个高光的结尾是否在后续高光开始之后检测到重叠。)
答案 1 :(得分:0)
我这样做的方法是弹出突出显示文本的一对开始和结束位置,使得start是最小的。然后我将构建一个新的对,它代表那个点上未突出显示的文本的开始和结束位置。所以: