我的用户输入了文字,例如GSM = -73dBm,每次用户输入一段文字时,它将始终具有相同的字母和等号,唯一会改变的是数字,如果是正数或否定的。对于每个值范围,结果变化例如-1到-70是坏的,0到50是好的,51到100是优秀的。我可以想到这样做的唯一方法是列出用户可以输入的每个值。如下所示。
if ([myTextField.text isEqual:@"GSM=-73dBm"]) {
myTextField.text = @"bad";
} else if {
etc..}
必须有一种更简单的方法来检查。
答案 0 :(得分:1)
NSString* target = @"GSM=-73dBm";
NSScanner* sc = [[NSScanner alloc] initWithString:target];
[sc scanUpToString:@"=" intoString:nil];
[sc scanString:@"=" intoString:nil];
NSInteger i;
[sc scanInteger:&i];
现在i
是数字-73
,你可以做几个测试,看看它的范围是什么。
答案 1 :(得分:1)
所以你可以过滤掉这样的所有非数值。
NSString *stringToFilter = @"GSM=-73dBm";
NSMutableString *targetString = [NSMutableString string];
//these are characters that you want to keep, so numbers and negative sign
NSCharacterSet *required = [NSCharacterSet characterSetWithCharactersInString:@"-0123456789"];
for(int i = 0; i < [stringToFilter length]; i++)
{
unichar curChar = [stringToFilter characterAtIndex:i];
if([required characterIsMember:curChar])
{
[targetString appendFormat:@"%C", curChar];
}
}
//convert string to int value
int yourNumber = targetString.intValue;
NSLog(@"%d",yourNumber);
这将打印“-73”。 然后从这里你可以if else并检查值是否包含在某个范围内。
答案 2 :(得分:0)
您可以使用正则表达式
提取数字NSString *string = @"GSM=-73dBm";
NSString *pattern = @"-?\\d+";
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:nil error:&error];
if (!error) {
NSRange result = [regex rangeOfFirstMatchInString:string options: nil range: NSMakeRange(0, string.length)];
NSInteger number = [[string substringWithRange:result] integerValue];
NSLog(@"%ld", number);
} else {
NSLog(@"%@", error);
}
模式:
-?
可选的减号,如果还有加号,请使用[+-]?
\\d+
一个或多个数字字符