从NSString返回号码

时间:2012-04-21 18:58:24

标签: ios iphone ipad nsstring

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

如何从此字符串返回数字。 Number始终位于字符串的末尾,但我不能使用stringWithRange,因为number不具有常量长度。所以我正在寻求更好的方法。

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

有任何函数可以在字符串中找到数字吗?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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