检查文本字段文本是否几乎等于字符串

时间:2013-01-30 18:10:25

标签: iphone ios objective-c string uitextfield

我有一个名为textfield的UITextField。我有这段代码来检查textfield中的文本是否等于“exampletext”

if ([textfield.text isEqualToString:@"exampletext"]) {
    NSLog(@"Correct");
} else {
    NSLog(@"Wrong");
}

但我还想检查文本字段中的文本是否几乎等于“exampletext”,如果文本与“exampletext”几乎相同。就像文本是“eampletex”一样,我想要NSLog(@“关闭”)

有没有办法检查文本字段文本是否像50%等于“exampletext”? 或者任何方法来检查文本字段文本是否与“exampletext”具有50%相同的字符? 或者其他类似的东西?

4 个答案:

答案 0 :(得分:3)

你正在寻找的是levenshtein距离的实现,levenshtein(“你好”,“hallo”)=> 1,levenshtein(“你好”,“ellos”)=> 2.您可以查看this library

一旦你有两个字符串之间的距离,你可以得到百分比计算:百分比= 100 * levenshtein(原始,其他)/长度(原始)

答案 1 :(得分:1)

这是我的目标。从要匹配的字符串创建自定义字符集。检查texfield.text中针对该字符集的每个字符,如果匹配的数量接近字符串中的字母数,请执行某些操作。

NSString *testString = @"wordToCompare";
NSString *textFromTextfield = textfield.text;

//create a custom character set from the word you want to compare to...
NSCharacterSet *characterSetForString = [NSCharacterSet characterSetWithCharactersInString:testString];

//keep track of how many matches...
int numberOfCharsThatMatchSet = 0;

    for (int x = 0; x < [textFromTextField length]; x++) {

        unichar charToCheck = [textFromTextField characterAtIndex:x];

        if ([characterSetForString characterIsMember:charToCheck] == YES) {
            numberOfCharsThatMatchSet++;
        }

        NSLog(@"%d", numberOfCharsThatMatchSet);
    }

         // if the number of matches is the same as the length of the word + or - 2...
    if ((numberOfCharsThatMatchSet > [testString length] - 2 ) && (numberOfCharsThatMatchSet < [testString length] + 2 )) {
        NSLog(@"close match...");
    }

不确定这是否是您正在寻找的100%,但无论如何它可能会有所帮助......

答案 2 :(得分:0)

我确信在那里可能会有一些开源代码可以为你做到这一点......但是,我能想到的一种方法会给你带来一些好处......

将两个字符串的字符整理成数组。确定您想要成为主字符串的字符串并获取它的字符串长度。

现在比较每个角色。例如:Word 1:你好,Word 2:ello。

每次找到一封信,都会在计数中加一。如果在循环结束时,您的计数是您从主字符串中获取的原始长度的80%或更大,那么您很可能会有部分匹配。

因此,对于我们的示例,Word 1将是我们的主字符串,其长度为5.“ello”包含4/5个字符,因此匹配原始字符串的80%。

答案 3 :(得分:0)

我认为没有一种简单的方法(有几行代码)来解决这个问题。您可以考虑几种算法,并选择最适合您需求的算法。

您应该查看this问题。虽然它是针对另一种语言设计和解答的,但您要求提供一种方法或方法,以便在那里找到解决方案。