我刚刚阅读了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);
发布于 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是左侧字符串的字符数
这可能是一种更简单、更干净的方法,但这就是我的解决方案。
发布于 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)
发布于 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
https://stackoverflow.com/questions/594797
复制相似问题