如何检查NSString的最后一个字符

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*lastCharacter = [myString substringFromIndex:[myString length] - 1]; NSLog(@"%@",lastCharacter);` (12认同)

Abi*_*ern 5

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文档的链接.

编辑

我已经完成了一些分析,在这个简单的案例中它有点过分(见下面的评论).无论如何,我都会把答案留在这里,就像在这类事情中使用谓词一样.

  • 哇!谓词评估只是为了检查一个字符串的后缀?这有点矫枉过正. (6认同)
  • @dreamlax.你懂; 你是对的.我做了一些分析,NSPredicate方法比使用`-hasSuffix`慢大约3倍.36ms与扫描107,000个单词相比,14ms(所以它仍然很快).我纠正了! (2认同)

Sam*_*ane 5

如果您担心性能,并且想要检查一个字符,那么使用 -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放入方法中,我们添加了消息传递开销,这将导致分析结果出现偏差,除非您在分析替代方案时也这样做。

对于大多数情况来说,所有这些可能都是过早的优化 - 但当然,如果您每秒执行数千次此测试,那么它可能很重要(在这种情况下,您可能希望直接在循环中使用代码,因为消息传递在紧密的内循环中并不是一个好的计划)。