检查nsstring是否与另一个字符串匹配

时间:2009-11-23 06:34:21

标签: iphone objective-c cocoa cocoa-touch nsstring

假设我有一个字符串“167282”。如何检查字符串是否包含“128”?是否有任何条款可以知道匹配第一个字符串的第二个字符串的百分比? (如果第二个字符串的所有字符都存在于第一个字符串中。)请提前帮助和感谢。

3 个答案:

答案 0 :(得分:6)

使用以下内容:

NSString *compareString = @"128";
NSCharacterSet *compareCharSet = [NSCharacterSet characterSetWithCharactersInString:@"167282"];

NSUInteger strLen = [compareString length];
NSUInteger matchingCount = 0;
for (NSUInteger i = 0; i < strLen; ++i) {
  if ([compareCharSet characterIsMember:[compareString characterAtIndex:i]])
    ++matchingCount;
}

float percentMatching = matchingCount/(float)strLen;

其中matchingCount是compareString中与@“167282”中的字符匹配的字符数,percentMatching将是compareString中匹配的总字符数的百分比。就我所知,这是你对你的问题的意图 - 百分比匹配的概念在其他方面没有任何意义。

答案 1 :(得分:5)

您可以使用NSStringrangeOfString方法查找字符串是否包含其他字符串,如this question on the Apple Mailing Lists的答案所示。

if ([@"167282" rangeOfString:@"128"].location != NSNotFound) {
    NSLog(@"String contains '128'.");
}
else {
    NSLog(@"String doesn't contain '128'.");
}

答案 2 :(得分:1)

您始终可以使用NSString方法rangeOfString:来检查原始字符串是否包含所需的子字符串。此方法将返回NSRange,其中包含原始字符串中子字符串的位置:

[@"12345" rangeOfString:@"123"]; // Gives range {0, 3}
[@"12345" rangeOfString:@"345"]; // Gives range {2, 3}
[@"12345" rangeOfString:@"678"]; // Gives range {NSNotFound, 0}

仅当子字符串在原始字符串中完全包含时才有效。

对于“数量正确”,您可以使用返回范围的length属性以及原始字符串的长度,以查看子字符串包含原始字符串的哪个部分。例如:

NSRange r = [@"1234" rangeOfString:@"1"]; // Range {0, 1}
float portion = (float)r.length / (float)[@"1234" length]; // Gives 0.25f

请记住,如果重复子字符串,这将会崩溃 - 检查@"1",因为@"111"的子字符串只会出现第一次出现,这意味着它会声称该字符串为“33%通过这种方法纠正。根据您的预期用途,这可能是您想要的,也可能不是。