将包含字符 Objective-C 的 NSString 中的数字加 1
Add 1 to a number in an NSString that contains characters Objective-C
我刚开始学习 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);
这是使用正则表达式的替代解决方案。
它找到整数的范围(\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);
我刚开始学习 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);
这是使用正则表达式的替代解决方案。
它找到整数的范围(\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);