Que*_*ons 61 cocoa objective-c nsstring
我想在目标C中询问有关NSString*的问题.我可以检查NSString*对象的最后一个字符吗?
例:
NSString* data = @"abcde,";
if(data is end with ',') // I don't know this part
// do sth
Run Code Online (Sandbox Code Playgroud)
非常感谢你.
rob*_*jam 166
NSString *data = @"abcde,";
if([data hasSuffix:@","]) // This returns true in this example
// do something
Run Code Online (Sandbox Code Playgroud)
该NSString的编程指南建议:
如果您只想确定字符串是否包含给定模式,则可以使用谓词:
所以,在你的例子中:
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
}
Run Code Online (Sandbox Code Playgroud)
写得有点啰嗦?也许,但如果你在不止一个地方这样做,它可以很容易地重构成一个帮助方法.
这是NSPredicate文档的链接.
编辑
我已经完成了一些分析,在这个简单的案例中它有点过分(见下面的评论).无论如何,我都会把答案留在这里,就像在这类事情中使用谓词一样.
如果您担心性能,并且想要检查一个字符,那么使用 -characterAtIndex: 方法可能会更快。-hasSuffix:采用字符串,因此可能需要做更多的工作,而不仅仅是检查单个字符(尽管差异可能很小)。
您还可以使用类别向 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','])
{
}
Run Code Online (Sandbox Code Playgroud)
当然,为了确定起见,您应该进行分析。请记住,通过将endsWithCharacter放入方法中,我们添加了消息传递开销,这将导致分析结果出现偏差,除非您在分析替代方案时也这样做。
对于大多数情况来说,所有这些可能都是过早的优化 - 但当然,如果您每秒执行数千次此测试,那么它可能很重要(在这种情况下,您可能希望直接在循环中使用代码,因为消息传递在紧密的内循环中并不是一个好的计划)。
| 归档时间: |
|
| 查看次数: |
33037 次 |
| 最近记录: |