-2

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

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

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

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

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

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

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

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

4

2 回答 2

1

从上面的示例中,看起来您正在尝试解析 HTML ...

为此,我建议使用Html Agility Pack而不是自己尝试。

于 2013-02-14T13:07:33.517 回答
1

好的,从您的最新评论中,我尝试猜测您想要做什么,并希望可以为您指明正确的方向。

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

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

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

两者都成立。

然后,查找startDelimiter的一般方法是构建从selectionStart - nselectionStart的子字符串,从n = 1开始,然后增加n直到上面的第一个表达式为真。endDelimiter也可以这样做,但是您可以构建从selectionEnd + 1selectionEnd + n + 1的子字符串并增加n直到第二个表达式为真。

如果分隔符很大,这可能会变慢。在最坏的情况下, selectionStart之前的输入文本的整个部分将是startDelimiter,您只能在selectionStart - 1次迭代之后找到。

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

于 2013-02-14T15:02:08.363 回答