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