检查字符串是否包含大于某个数的数字

7

我有以下NSString:

NSString *testString=@"megaUser 35 youLost 85 noob 10 showTime 36 pwn 110"

我想知道这个字符串是否包含一个大于80的数字。我不需要知道在哪里,有多少个或者实际的数字是什么,只需要一个布尔值(是或否)。我考虑过使用正则表达式从字符串中删除除数字以外的所有内容,但是之后我不确定如何有效地进行检查。
换句话说,是否有一种解决方案,不需要将字符串分成数组组件,然后逐个进行检查?如果有人知道如何做到这一点,请告诉我!
谢谢!
1个回答

3
您可以使用扫描仪进行此操作:
// The string to parse
NSString *testString=@"megaUser 35 youLost 85 noob 10 showTime 36 pwn 110";

// Create a new scanner for this string and tell it to skip everything but numbers
NSScanner *scanner = [[NSScanner alloc] initWithString:testString];
NSCharacterSet *nonNumbers = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
[scanner setCharactersToBeSkipped:nonNumbers];

// Scan integers until we get to the end of the string
// If you will have numbers larger than int, you can use long long and scanLongLong for larger numbers
int largestNumber = 0, currentNumber = 0;
while ([scanner scanInt:&currentNumber] == YES)
{
    if (currentNumber > largestNumber)
        largestNumber = currentNumber;
}

// See if the number is larger than 80
if (largestNumber > 80)
    return YES;

// Nope
return NO;

1
谢谢您的快速回复。我会尝试一下。您能告诉我这是否会占用很多资源吗?再次感谢! - Teddy13
这可能是在不解析 C 字符串的情况下你能得到的最快速度,即使你那样做,你也可能不会获得很多提升。如果你要执行数万个这样的操作,那么值得分析不同的方法以确定哪种最快,否则这将是其中一种较好的方法。 - lnafziger
1
我的这个回答展示了一些不同的解析字符串的方法以及它们的相对速度(虽然它们并不都是直接适用的,但你会对不同的方法和它们的速度有一个大致的了解)。 - lnafziger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接