左右字符串检测算法和操作

本文关键字:操作 算法 检测 字符串 左右 | 更新日期: 2023-09-27 17:59:01

我正在寻找一种机制来检测给定字符串的最小和唯一左右字符串。考虑以下文本:

   <button id="allow" type="submit" class="button-big" name="allow" value="93db44648ab3607b10e600eaf796c794" tabindex="4">

我需要得到的值。因此,如果我决定选择substring,我会使用name="allow" value="作为左字符串,"作为右字符串(基于整个html数据的唯一性)和它们的相对索引。但我正在使用的一个工具是检测唯一但足够小的左字符串是w" value="

我的问题是如何找到这个?由于我没有工具的来源,我无法检测到它。

请不要建议我在C#或任何html库中使用HAP,因为上面的html代码只是一个易于理解的示例。我还有其他类型的数据。

任何C#或java代码片段都很好。

编辑:我正在处理的数据是非html的,非标准的,但团队描述的东西。由于其性质,它也需要用Java进行编码。因此,我无法考虑HtmlAgilityPack。

我想重视最小的字符串,而不是识别唯一模式的所有工作可能性。

左右字符串检测算法和操作

从上面的例子来看,您似乎正在尝试解析HTML。。。

为此,我建议使用Html敏捷包,而不是自己尝试。

好吧,从你最近的评论中,我试着猜测你想做什么,希望能给你一个正确的方向。

一些用户选择一些文本并说"为我自动检测最小分隔符"。因此,您的输入是整个文本String类型)以及用户选择的开始和结束索引(int类型的selectionStartselectionEnd)。您期望的输出将是两个字符串,它们唯一地标识整个文本中所选内容的开始和结束(让我们称它们为startDelimiterendDelimiter),这样

text.indexOf(startDelimiter, 0) + startDelimiter.length() == selectionStart

text.indexOf(endDelimiter, selectionStart) - 1 == selectionEnd

两者都成立。

查找startDelimiter的一般方法是从selectionStart-nselectionStart构建子字符串,从n=1开始,然后增加n,直到上面的第一个表达式为true。对于endDelimiter也可以执行同样的操作,但您将从selectionEnd+1构建子字符串到selectionEnd+n+1,直到第二个表达式为true。

如果分隔符将变大,则速度可能会变慢。在最坏的情况下,selectionStart之前的输入文本的整个部分将是startDelimiter,并且只有在selectionStart-1迭代之后才能找到。

因此,一个可能的改进是使用二进制搜索方法,并在每次迭代中加倍n,直到找到有效的分隔符,然后以相同的方式减少分隔符,直到子字符串不再是有效的分隔符号。在此之前的子字符串是您的最小分隔符。