Добавьте 1 к числу в строке NSString, содержащей символы Objective- C - PullRequest
2 голосов
/ 30 марта 2020

Я новичок в изучении Objective- C (мой первый язык программирования!) И пытаюсь написать небольшую программу, которая добавит 1 к числу, содержащемуся в строке. Например, AA1BB становится AA2BB. .

До сих пор я пытался извлечь число и добавить 1. Затем извлечь буквы и сложить все вместе в новую строку. У меня был некоторый успех, но мне не удалось вернуться к исходному расположению исходной строки.

Код, который я имею до сих пор, дает результат 2BB и игнорирует символы до числа, которое не является чем Я после (результат, который я пытаюсь с этим примером будет AA2BB). Я не могу понять, почему!

NSString* aString = @"AA1BB";

NSCharacterSet *numberCharset = [NSCharacterSet characterSetWithCharactersInString:@"0123456789-"]; //Creating a set of Characters object//

NSScanner *theScanner = [NSScanner scannerWithString:aString];

int someNumbers = 0;

while (![theScanner isAtEnd]) {
  // Remove Letters
  [theScanner scanUpToCharactersFromSet:numberCharset
                             intoString:NULL]; 
  if ([theScanner scanInt:&someNumbers]) {}
}

NSCharacterSet *letterCharset = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"];

NSScanner *letterScanner = [NSScanner scannerWithString:aString];

NSString* someLetters;
while (![letterScanner isAtEnd]) {
     // Remove numbers
     [letterScanner scanUpToCharactersFromSet:letterCharset
                                intoString:NULL];

   if ([letterScanner scanCharactersFromSet:letterCharset intoString:&someLetters]) {}
}

++someNumbers; //adds +1 to the Number//


NSString *newString = [[NSString alloc]initWithFormat:@"%i%@", someNumbers, someLetters]; 

NSLog (@"String is now %@", newString);

1 Ответ

0 голосов
/ 30 марта 2020

Это альтернативное решение с регулярным выражением.

Находит диапазон целого числа (\\d+ - это одна или несколько цифр), извлекает его, увеличивает его и заменяет значение в данном диапазоне.

NSString* aString = @"AA1BB";
NSRange range = [aString rangeOfString:@"\\d+" options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
    NSInteger numericValue = [aString substringWithRange:range].integerValue;
    numericValue++;
    aString = [aString stringByReplacingCharactersInRange:range withString:[NSString stringWithFormat:@"%ld", numericValue]];

}
NSLog(@"%@", aString);
...