如何检查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,那么你可能想直接在循环中使用代码,因为消息传递在一个紧密的内部循环内并不是一个伟大的计划)。