【问题标题】:Checking if a nsstring matches another string检查 nsstring 是否与另一个字符串匹配
【发布时间】:2009-11-23 06:34:21
【问题描述】:

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

【问题讨论】:

  • 嗨 Shyam,这不是一个您可以提前提供thanx的网站,当有人回答您的问题时,请确保您回来并给他们一个支持,如果合适的话,将其标记为答案。

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


【解决方案1】:

使用以下内容:

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 中匹配的字符总数的百分比。据我所知,这是您对问题的意图 - 否则百分比匹配的概念将没有任何意义。

【讨论】:

  • 我最初需要的是检查一个字符串,例如 14672 中是否包含字符 1,3,7。获取所有 3 个字符是否都存在或其中 2 个字符是否存在它们出现在我的字符串中
  • 这正是这个 sn-p 的目的,Shyam。如果提供的答案之一是您正在寻找的答案,您应该对其进行投票和/或使用绿色复选标记将其标记为已接受的答案。
  • 接受答案(绿色复选标记)作为提问者更为重要,因为它有助于您的“接受百分比”分数。如果您从不接受答案,有些人将不太可能回答您的任何进一步问题。
【解决方案2】:

您可以使用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'.");
}

【讨论】:

    【解决方案3】:

    您总是可以使用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% 正确”方法。根据您的预期用途,这可能是也可能不是您想要的。

    【讨论】:

      猜你喜欢
      • 2013-05-16
      • 1970-01-01
      • 2012-10-04
      • 2010-12-19
      • 1970-01-01
      • 2010-12-08
      • 2016-10-15
      • 1970-01-01
      相关资源
      最近更新 更多