我有这样的 NSString:@“text 932”。
我如何从这个字符串返回数字。数字总是在字符串的末尾,但我不能使用 stringWithRange,因为数字没有恒定的长度。所以我正在寻找更好的方法。
我也想知道如何从@“text 3232 text”这样的字符串中返回数字。我也不知道号码的位置。
有什么函数可以在字符串中找到数字吗?
这是一个适用于两个字符串的解决方案
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);
}
更新:
更新以测试是否匹配,并处理负数/十进制数
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