0

我有这样的 NSString:@“text 932”。

我如何从这个字符串返回数字。数字总是在字符串的末尾,但我不能使用 stringWithRange,因为数字没有恒定的长度。所以我正在寻找更好的方法。

我也想知道如何从@“text 3232 text”这样的字符串中返回数字。我也不知道号码的位置。

有什么函数可以在字符串中找到数字吗?

4

2 回答 2

3

这是一个适用于两个字符串的解决方案

NSString *myString = @"text 3232 text";

//Create a scanner with the string
NSScanner *scanner = [NSScanner scannerWithString:myString];

//Create a character set that includes all letters, whitespaces, and newlines
//These will be used as skip tokens
NSMutableCharacterSet *charactersToBeSkipped = [[NSMutableCharacterSet alloc]init];

[charactersToBeSkipped formUnionWithCharacterSet:[NSCharacterSet letterCharacterSet]];
[charactersToBeSkipped formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

[scanner setCharactersToBeSkipped:charactersToBeSkipped];
[charactersToBeSkipped release];

//Create an int to hold the number   
int i;

//Do the work
if ([scanner scanInt:&i]) {

    NSLog(@"i = %d", i);
}

的输出NSLog

i = 3232

编辑

处理小数:

float f;

if ([scanner scanFloat:&f]) {

   NSLog(@"f = %f", f);
}
于 2012-04-21T19:43:08.347 回答
1

更新:
更新以测试是否匹配,并处理负数/十进制数

NSString *inputString=@"text text -9876.234 text";
NSString *regExprString=@"-{0,1}\\d*\\.{0,1}\\d+";
NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:regExprString options:NSRegularExpressionCaseInsensitive|NSRegularExpressionDotMatchesLineSeparators error:nil];
NSRange rangeOfFirstMatch=[regex firstMatchInString:inputString options:0 range:NSMakeRange(0, inputString.length)].range;
if(rangeOfFirstMatch.length>0){
    NSString *firstMatch=[inputString substringWithRange:rangeOfFirstMatch];
    NSLog(@"firstmatch:%@",firstMatch);
}
else{
    NSLog(@"No Match");
}

原文: 这是一个使用正则表达式的解决方案:

NSString *inputString=@"text text 0123456 text";
NSString *regExprString=@"[0-9]+";
NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:regExprString options:NSRegularExpressionCaseInsensitive|NSRegularExpressionDotMatchesLineSeparators error:nil];
NSString *firstMatch=[inputString substringWithRange:[regex firstMatchInString:inputString options:0 range:NSMakeRange(0, inputString.length)].range];
NSLog(@"%@",firstMatch);

输出为:0123456

如果你想要一个实际的整数,你可以添加:

NSInteger i=[firstMatch integerValue];
NSLog(@"%d",i);

输出是:123456

于 2012-04-22T01:49:39.050 回答