【问题标题】:check if string contains number larger than检查字符串是否包含大于
【发布时间】:2013-07-05 23:32:58
【问题描述】:

我有以下 NSString:

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

我想知道这个字符串是否包含大于 80 的数字。我不需要知道实际数字在哪里、多少或什么,而只是一个布尔值(是或否)。我曾考虑过对字符串进行正则表达式以从中删除除数字之外的所有内容,但之后我不确定进行检查的有效方法是什么。

换句话说,有没有一种解决方案不需要将字符串分解为数组组件,然后一次检查一个?如果有人知道如何做到这一点,请告诉我!

谢谢!

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    您可以为此使用扫描仪:

    // 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;
    

    【讨论】:

    • 感谢您的快速回复。我会试一试。你能告诉我这是否资源繁重吗?再次感谢!
    • 在不解析 C 字符串的情况下,它可能与您获得的速度一样快,即使那样您也可能不会获得很多。如果您要执行 10 次这样的操作,那么值得分析不同的方法以查看最快的方法,否则这将是更好的方法之一。
    • This answer of mine 展示了解析字符串的一些不同方法以及它们的相对速度(它们不会都直接适用,但您会大致了解不同的方法以及速度有多快他们是)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2013-05-18
    • 2016-11-11
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多