1

我遇到了一个问题,使扫描仪适用于这个特定的字符串。

代码来了:

tempString = @"30.15 in. Hg (1021 hPa)";
scanner = [NSScanner scannerWithString:tempString]; //setting the scanning location,
[scanner setCharactersToBeSkipped:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789.,-+ "]invertedSet]];
value = 0;
_i = 0;
while([scanner isAtEnd] == NO)
{
    [scanner scanFloat:&value];
    if(_i == 1)
    {
        pressure = value;
    }
    _i++;
}
NSLog(@"pressure = %f hpa",pressure);

这个无限循环...

如果我更改字符串:tempString = @"30.15 in 8.8 Hg (1021 hPa)";

然后它工作正常

如果我更改为:tempString = @"30.15 in Hg (1021 hPa)";

它也可以正常工作。

问题来自“。” (点)

有什么干净的解决方案可以完成这项工作吗?

多谢。

4

2 回答 2

2

您可以检查是否-scanFloat:返回 YES 以检查是否扫描了有效的浮点数。如果返回 NO,则跳过该字符。

while (![scanner isAtEnd]) {
    if ([scanner scanFloat:&value]) {
      if(_i == 1) {
        pressure = value;
      }
      _i++;
    } else {
      [scanner setScanLocation:[scanner scanLocation] + 1];
    }
}
于 2011-02-07T11:25:36.290 回答
0
tempString = @"30.15 in. Hg (1021 hPa)";
scanner = [NSScanner scannerWithString:tempString];
[scanner scanUpToString:@"(" intoString:nil];
[scanner scanString:@"(" intoString:nil];
[scanner scanFloat:&value];
于 2011-02-07T11:27:14.793 回答