如何检查NSString的最后一个字符
我想问一个关于目标C中的NSString *的问题吗?我可以检查一个NSString *对象的最后一个字符吗?
例:
NSString* data = @"abcde,"; if(data is end with ',') // I don't know this part // do sth
非常感谢你。
NSString *data = @"abcde,"; if([data hasSuffix:@","]) // This returns true in this example // do something
NSString编程指南build议:
如果你只是想确定一个string是否包含给定的模式,你可以使用谓词:
所以,在你的例子中:
NSString *data = @"abcde,"; // Create the predicate NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"SELF endswith %@", @","]; // Run the predicate // match == YES if the predicate is successful BOOL match = [myPredicate evaluateWithObject:data]; // Do what you want if (match) { // do something }
有点啰嗦写? 也许吧,但是如果你在多个地方做到这一点,它可以很容易地重构成一个辅助方法。
这是NSPredicate文档的链接。
编辑
我已经做了一些分析,这在这个简单的情况下是矫枉过正的(见下面我的评论)。 无论如何,我将把答案留在这里,就像使用谓词这样的事情的一个例子。
如果您担心性能,并且想要检查一个字符,那么使用-characterAtIndex:方法可能会更快。 -hasSuffix:需要一个string,因此可能需要做的工作比单纯检查一个字符(尽pipe差异可能是微不足道的)。
您也可以使用类别将方法添加到NSString中,如下所示:
@interface NSString(StringUtilities) - (BOOL) endsWithCharacter: (unichar) c; @end @implementation NSString(StringUtilities) - (BOOL) endsWithCharacter: (unichar) c { NSUInteger length = [self length]; return (length > 0) && ([self characterAtIndex: length - 1] == c); } @end // test it... NSString *data = @"abcd,"; if ([data endsWithCharacter: L',']) { }
当然,你应该介绍一下。 请记住,尽pipe通过将endsWithCharacter放入一个方法中,我们已经将消息传递给它,这将会导致性能分析结果偏斜,除非在分析替代scheme时执行相同的操作。
所有这些在大多数情况下可能是不成熟的优化 – 但是当然如果你每秒钟做数千次的testing,那么你可能想直接在循环中使用代码,因为消息传递在一个紧密的内部循环内并不是一个伟大的计划)。