gpt4 book ai didi

objective-c - 使用 NSScanner 查找字符串中的所有数字

转载 作者:太空狗 更新时间:2023-10-30 03:35:10 28 4
gpt4 key购买 nike

我使用下面的代码使用 NSScannerinputString 中提取数字

NSString *inputString = @"Dhoni7 notout at183*runs in 145andhehit15four's and10sixers100";
NSString *numberString;
NSArray *elements = [inputString componentsSeparatedByString:@" "];
for (int i=0; i<[elements count];i++)
{
NSScanner *scanner = [NSScanner scannerWithString:[elements objectAtIndex:i]];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"];

// Throw away characters before the first number.
[scanner scanUpToCharactersFromSet:numbers intoString:NULL];

// Collect numbers.
[scanner scanCharactersFromSet:numbers intoString:&numberString];

// Result.
int number = [numberString integerValue];
if (number != 0)
{
NSLog(@"%d\n",number);
numberString = nil;
}
}

我的预期输出是71831451510100

但我得到的输出是718314510

它只是从每个单词中提取第一次出现的数字。例如:如果它的 Dho7ni89 它只检测到 7 而没有检测到 89。如果有人帮我想出解决这个问题的方法,我会非常高兴。

最佳答案

Matt 的速度稍快一些。为什么要在开头拆分字符串?
稍微重新安排一下代码就会产生所需的结果:

NSScanner *scanner = [NSScanner scannerWithString:@"Dhoni7 notout at183*runs in 145andhehit15four's and10sixers100"];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"];

while (true) {
// Throw away characters before a number
[scanner scanUpToCharactersFromSet:numbers intoString:NULL];

// Read the number
NSString *numberString;
if ([scanner scanCharactersFromSet:numbers intoString:&numberString]) {
long number = [numberString integerValue];
NSLog(@"%ld\n",number);
} else {
break;
}
}

输出

7 183 145 15 10 100

注意
你也可以使用

NSCharacterSet *numbers = [NSCharacterSet decimalDigitCharacterSet];

过滤掉数字。我发现这比列出字符要简洁一些。但是,它将包括例如印度文字和阿拉伯文字的十进制数字。

关于objective-c - 使用 NSScanner 查找字符串中的所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30424930/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com