Как использовать NSScanner?

var2 тип это string, преобразовать его в int.

var2 = int(var2)

Как вы знаете, '1' == 1 является ложным.

16
задан Mohamed Elkassas 31 May 2015 в 13:25
поделиться

3 ответа

'Вот то, что я делаю для вытаскивания определенных значений из строки

Первый, у меня есть этот метод, определенный

- (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
ответ дан 30 November 2019 в 15:06
поделиться

NSScanner - это линейный сканер. Вы должны сканировать то, что вы не хотите, чтобы получить то, что хотите.

Вы можете выполнить [aScanner scanUpToCharactersInSet: [NSCharacterSet decimalDigitCharacterSet] intoString: NULL] , чтобы пропустить все, что до числовой символ. Затем вы выполняете [aScanner scanInteger: & anInteger] , чтобы преобразовать символ в целое число.

5
ответ дан 30 November 2019 в 15:06
поделиться

Решение 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)
50
ответ дан 30 November 2019 в 15:06
поделиться