0

我正在使用 levenstein 编辑距离来查找两个字符串的相似程度。这两个字符串是这样的。如果有的话,第一个是两者中较长的一个;它也是我希望比较另一个的非截断非修改字符串。第二个字符串可能在末尾被截断,并且缺少字符。可以有多个唯一的字符串一和字符串二。

我读到了第二个字符串列表,每个字符串都包含在一行中,格式为“[字符串二] - $0.00”,所以它是字符串二加上一个空格、一个破折号、一个空格,然后是一个价格。

所以我有一个第二个字符串列表(格式),我有两个选项。删除价格和“ - ”或保留在那里。

  • 如果我删除它。我在每个字符串中读取两个并使用分隔符“$”对其进行标记。我不知道任何字符串 2 有多长,所以我必须执行 stringtwo.removeAll("-") 以摆脱破折号,然后为空白区域执行 .trim() 。好吧,如果字符串 2 中有破折号,它也会被非自愿删除。所以有了这个,我得到了精确的字符串(levenstein = 0),截断但仍然精确的字符串(字符串在长度字符串 1 - levenstein 之前是相同的),截断并缺少整数数量的破折号(字符串在几个地方之间相同破折号,如果被截断,最后也缺少),或者没有被截断但缺少整数个破折号。

  • 如果我离开它。仍然在每个字符串中读取两个并使用分隔符“$”进行标记。所以现在我有了字符串二“[字符串二]-”的这种格式。所以所有 levenstein 距离都会减少 3。这里的问题是,如果我有一个字符串 1 Ex。“dog food is yummy”,我尝试比较的字符串二是“dog food is yum -”,levD = 3 但这与字符串 2“dog food is yum -”的 levD 相同。

如您所见,这两个选项都会产生问题。似乎我无法在我的程序中克服这些问题来尝试将字符串二的输入列表与我的字符串列表匹配。

谁能看到更好的方法,是否有任何其他字符串比较器可以用来减少问题?

4

1 回答 1

1

试试这个:应该在每个字符串中找到的最后一个“-”处截断字符串,同时保持字符串的其余部分完好无损。

StringTwo.substring(0, StringTwo.lastIndexOf("-")).trim();

这些字符串操作可能很昂贵,因此如果您使用大量字符串,您可能会考虑其他优化。

这个解决方案也很脆弱,因为它硬编码值以确定在哪里修剪代码。这可以在别处定义并传入,因此它可以变化。

一旦你的工作相对良好和安全,接下来尝试查看来自 Apache 的 StringUtils,它具有更广泛的字符串操作。

org.apache.commons.lang.StringUtils from Apache Commons Lang
于 2013-02-01T17:33:54.827 回答