左右字符串检测算法和操作
本文关键字:操作 算法 检测 字符串 左右 | 更新日期: 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
类型的selectionStart和selectionEnd)。您期望的输出将是两个字符串,它们唯一地标识整个文本中所选内容的开始和结束(让我们称它们为startDelimiter和endDelimiter),这样
text.indexOf(startDelimiter, 0) + startDelimiter.length() == selectionStart
和
text.indexOf(endDelimiter, selectionStart) - 1 == selectionEnd
两者都成立。
查找startDelimiter的一般方法是从selectionStart-n到selectionStart构建子字符串,从n=1开始,然后增加n,直到上面的第一个表达式为true。对于endDelimiter也可以执行同样的操作,但您将从selectionEnd+1构建子字符串到selectionEnd+n+1,直到第二个表达式为true。
如果分隔符将变大,则速度可能会变慢。在最坏的情况下,selectionStart之前的输入文本的整个部分将是startDelimiter,并且只有在selectionStart-1迭代之后才能找到。
因此,一个可能的改进是使用二进制搜索方法,并在每次迭代中加倍n,直到找到有效的分隔符,然后以相同的方式减少分隔符,直到子字符串不再是有效的分隔符号。在此之前的子字符串是您的最小分隔符。