首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用NSScanner?

如何使用NSScanner?
EN

Stack Overflow用户
提问于 2009-02-27 13:42:05
回答 5查看 36.2K关注 0票数 18

我刚刚阅读了NSScanner版的Apple documentation。我正在尝试获取这个字符串的整数:

@"user logged (3 attempts)"

我找不到任何例子,比如如何在括号内扫描。有什么想法吗?

代码如下:

NSString *logString = @"user logged (3 attempts)";
NSScanner *aScanner = [NSScanner scannerWithString:logString];

[aScanner scanInteger:anInteger];

NSLog(@"Attempts: %i", anInteger);
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-27 14:00:47

‘下面是我从字符串中获取特定值的方法

首先,我定义了这个方法

- (NSString *)getDataBetweenFromString:(NSString *)data leftString:(NSString *)leftData rightString:(NSString *)rightData leftOffset:(NSInteger)leftPos; 
{         
    NSInteger left, right;         
    NSString *foundData;
    NSScanner *scanner=[NSScanner scannerWithString:data];                  
    [scanner scanUpToString:leftData intoString: nil];         
    left = [scanner scanLocation];         
    [scanner setScanLocation:left + leftPos];         
    [scanner scanUpToString:rightData intoString: nil];         
    right = [scanner scanLocation] + 1;         
    left += leftPos;         
    foundData = [data substringWithRange: NSMakeRange(left, (right - left) - 1)];         return foundData; 
}

那就叫它吧。

foundData = [self getDataBetweenFromString:data leftString:@"user logged (" rightString:@"attempts)" leftOffset:13];

leftOffset是左侧字符串的字符数

这可能是一种更简单、更干净的方法,但这就是我的解决方案。

票数 17
EN

Stack Overflow用户

发布于 2009-08-20 08:24:34

Ziltoid的解决方案可以工作,但它的代码比您需要的更多。

对于给定的情况,我不会费心实例化NSScanner。NSCharacterSet和NSString为您提供了所需的一切:

    NSString *logString = @"user logged (3 attempts)";
    NSString *digits = [logString stringByTrimmingCharactersInSet:
         [[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
    NSLog(@"Attempts: %i", [digits intValue]);

或者在Swift中:

    let logString = "user logged (3 attempts)"
    let nonDigits = NSCharacterSet.decimalDigitCharacterSet().invertedSet
    let digits : NSString = logString.stringByTrimmingCharactersInSet(nonDigits)
    NSLog("Attempts: %i", digits.intValue)
票数 52
EN

Stack Overflow用户

发布于 2011-12-03 22:09:08

这里有一个使用NSScanner的简单解决方案(是的,@NSResponder有一个非常好的解决方案!):

NSString *logString = @"user logged (3 attempts)";
NSString *numberString;
NSScanner *scanner = [NSScanner scannerWithString:logString];
[scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:nil];
[scanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&numberString];
NSLog(@"Attempts: %i", [numberString intValue]);

NSLog输出:

Attempts: 3
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/594797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档