我有这样的NSString:@“text 932”。
如何从此字符串返回数字。 Number始终位于字符串的末尾,但我不能使用stringWithRange,因为number不具有常量长度。所以我正在寻求更好的方法。
我想要'知道如何从字符串中返回数字@“text 3232 text”。我也不知道号码的位置。
有任何函数可以在字符串中找到数字吗?
答案 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