如何在iOS中的特定字符后过滤字符串?

时间:2013-08-16 13:43:29

标签: ios nsstring nsscanner

我想在字符'='后过滤字符串。例如,如果8 + 9 = 17我的输出应该是17.我可以使用NSScanner在'='之前过滤字符,如何进行反向???我需要一种有效的方法来实现这一点,而无需使用componentsSeparatedByString或创建数组

4 个答案:

答案 0 :(得分:12)

每个人似乎都喜欢使用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");
}

更新

注意 - 对于这个具体的例子,如果只进行一次,效率的差异可以忽略不计。

但一般来说,使用componentsSeparatedByString:将扫描整个字符串,查找分隔符的每次出现。然后它创建一个包含所有子串的数组。当你需要大多数这些子串时,这很好。

当你只需要一个较大字符串的一部分时,这是非常浪费的。无需扫描整个字符串。无需创建阵列。没有必要获得所有其他子串。

答案 1 :(得分: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的回答表明,只要需要获得字符串的一小部分,就有更好的机制。只要只需要一小部分字符串,就可以使用它而不是这种方法。

答案 2 :(得分: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);
        }

输出

First String 8 + 9

第二串17

答案 3 :(得分:0)

使用此:

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

 Log: Practice[7582:11303] (
        "4+6",
        10
    )