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