0

我想在字符'='之后过滤字符串。例如,如果 8+9=17 我的输出应该是 17。我可以使用 NSScanner 在“=”之前过滤字符,如何反转?我需要一种有效的方法来做到这一点,而不使用 componentsSeparatedByString 或创建一个数组

4

4 回答 4

13

每个人似乎都喜欢使用componentsSeparatedByString,但是当您只想要字符串的一部分时,它的效率非常低。

尝试这个:

NSString *str = @"8+9=17";
NSRange equalRange = [str rangeOfString:@"=" options:NSBackwardsSearch];
if (equalRange.location != NSNotFound) {
    NSString *result = [str substringFromIndex:equalRange.location + equalRange.length];
    NSLog(@"The result = %@", result);
} else {
    NSLog(@"There is no = in the string");
}

更新:

注意 - 对于这个特定示例,如果只执行一次,效率差异可以忽略不计。

但总的来说,usingcomponentsSeparatedByString:将扫描整个字符串以查找每个出现的分隔符。然后它创建一个包含所有子字符串的数组。当您需要大多数这些子字符串时,这非常有用。

当您只需要较大字符串的一部分时,这是非常浪费的。无需扫描整个字符串。无需创建数组。无需获取所有其他子字符串。

于 2013-08-16T15:44:19.593 回答
8
NSArray * array = [string componentsSeparatedByString:@"="];
if (array)
{
    NSString * desiredString = (NSString *)[array lastObject]; //or whichever the index
}
else
{
    NSLog(@""); //report error - = not found. Of array could somehow be not created.
}

注意: 虽然这是非常流行的拆分解决方案,但只有在需要用分隔符字符串分隔的每个子字符串时才值得尝试。rmaddy 的回答建议在只需要获取一小部分字符串时使用更好的机制。只要只需要字符串的一小部分,就使用它而不是这种方法。

于 2013-08-16T13:45:59.897 回答
5

尝试使用这个

        NSArray *arr = [string componentsSeparatedByString:@"="];
        if (arr.count > 0)
        {
            NSString * firstString = [arr objectAtIndex:0];
            NSString * secondString = [arr objectAtIndex:1];
            NSLog(@"First String %@",firstString);
            NSLog(@"Second String %@",secondString);
        }

输出

第一个字符串 8+9

第二弦 17

于 2013-08-16T13:47:32.893 回答
0

用这个:

 NSString *a =@"4+6=10";
    NSLog(@"%@",[a componentsSeparatedByString:@"="])

;

 Log: Practice[7582:11303] (
        "4+6",
        10
    )
于 2013-08-16T13:47:11.157 回答