2013-08-16 100 views
-1

我想在字符'='后面过滤字符串。例如,如果8 + 9 = 17我的输出应该是17.我可以使用NSScanner在'='之前过滤字符,如何做它的反向?我需要一个有效的方式来做到这一点,而无需使用componentsSeparatedByString或创建一个数组如何在iOS中的特定字符后过滤字符串?

+2

'componentsSeparatedByString'(in * my * opinion)是最常被滥用的方法之一。为什么创建一个数组?是不是'rangeOfString' +'substringFromIndex'更直接?但是SO回答者和读者似乎很喜欢它! - 对不起,我不得不说一次。 –

+0

马丁R是对的,但我不知道如何rangeOfString选项更好。我会建议接受@ rmaddy的回答,而不是我的回答,方法是按下答案下方的复选标记。 –

+0

您能否解释为什么您对建议的解决方案不满意(例如,使用'componentsSeparatedByString')? – Shai

回答

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

+1,因为我已经有一个模糊的想法,你是对的。你能解释一下相对的优点吗?我建议OP接受你的回答而不是我的回答。 –

+0

请参阅我的更新以获取解释。 – rmaddy

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的回答提出了更好的机制,只要需要的只是获得一小部分字符串。无论何时只需要一小部分字符串,都可以使用该方法代替此方法。

+1

这是一种非常低效的方式来获得一个较大的字符串的一小块。 – rmaddy

+0

这是简单而有效的LOC。一定要+1! –

+0

检查数组数然后如果([数组数]> 1)分配 NSString * desiredString =(NSString *)[array objectAtIndex:1]; //或者索引 } else { NSLog(@“”); //报告错误 - =未找到。数组可以以某种方式不被创建。 } – shyla

0

使用此:

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

;

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

尝试使用这一

 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

+1

如果字符串中没有'=',这段代码就会崩溃。 – rmaddy

+0

第一个NSLog应该是NSLog(@“First String%@”,firstString); –

+1

@PradeepReddyKyp感谢您的纠正。 –

相关问题