Java 单个字母导致的字符串不匹配

Java 单个字母导致的字符串不匹配,java,string,Java,String,我想知道字符串是否有单个不匹配项 1)CHARACTER INTERCHANGE W/O DISTURBING PATTERN ACRPG0182F v/s ACRPG0812F ACNPA4428K v/s ACHPA4428K 2)CHARACTER LENGTH DIFFERS BY 1 DIGIT ACRPG0182F v/s ACRPG0812 ACRPG0182F v/s CRPG0812F 在案例1中,两个字符串长度相同,但有1个字符不匹配在案例2中,两个字符串长度相差1,并且

我想知道字符串是否有单个不匹配项

1)CHARACTER INTERCHANGE W/O DISTURBING PATTERN
ACRPG0182F v/s ACRPG0812F
ACNPA4428K v/s ACHPA4428K

2)CHARACTER LENGTH DIFFERS BY 1 DIGIT
ACRPG0182F v/s ACRPG0812
ACRPG0182F v/s CRPG0812F
在案例1中,两个字符串长度相同,但有1个字符不匹配
在案例2中,两个字符串长度相差1,并且两个字符串中的任何一个字符都可能不匹配。

  • 使用正则表达式(
    \d+
    )获取数字
  • 用所有字符(
    numberStr.tocharray()
    )填充
    集合
  • 使用
    set
    -
    set.difference(set1,set2)
    并查看它是否只有一个元素
最初我认为您需要以不同的方式检查差异:是否只有一个数字是不同的,而不是“字符串只包含一个不同的数字,不管顺序如何”。如果顺序也很重要,只需计算一下,看看它是否等于1


StringUtils.getLevenshteInstance(s1,s2)
from将执行此操作。

在字符串上定义一个Xor函数

这听起来像是
1
,请查看链接中的算法。

正如Bozho所提到的,使用可能是解决问题的最直接途径。该页面的定义似乎正是您所要求的

Levenshtein距离(LD)是衡量两个物体之间相似性的一种方法 字符串,我们将其称为源字符串和 目标字符串(t)。距离是删除的数量, 将s转换为t所需的插入或替换


关于这些字符串的预期长度有什么信息吗?如果1两个字符串的长度相同,而2个字符串的长度相差1个字母,我的意思是,如果你不想让算法在30000个字符的字符串上运行得足够快,那么你可以使用直接而简单的解决方案(iter所有字符串)。只是澄清一下-在第二种情况下,字符串的长度不同,并且具有相同的字符(缺少的字符除外)。这就是你想要抓住的;相同的字符,长度短一点?当我深入研究他的例子时,这是行不通的。他需要一个不同于我阅读他的问题的逻辑,是和否。似乎他需要一个1或2的levenstein距离,其中两个问题实际上是相互交换字母。根据输入,使用levenstein算法将输入过滤到只有1-2距离的输入,然后分析2以检查附加约束似乎是一种合理的方法。随着我深入了解他的示例,这将不起作用。他需要一个不同的逻辑,如果你应用这个问题的例子,你得到的距离是2。我不确定这是否足以满足你的需要。你甚至可以得到3个。这就是为什么我添加了Sets.difference解决方案