获得NSString的最后一个字

Lio*_*lak 7 objective-c ios

正如标题所示,我想从NSString中得到最后一个字.我以为使用这段代码:

NSArray *listItems = [someNSStringHere componentsSeparatedByString:@" "];
NSString *lastWordString = [NSString stringWithFormat:@"%@", listItems.lastObject];
anotherNSStringHere = lastWordString;
Run Code Online (Sandbox Code Playgroud)

但我认为如果它很大(并且它很大),NSArray将花费一些时间加载,并且它不会识别用逗号分隔的单词.

谢谢你的帮助!

Wev*_*vah 28

如果你想要超级健壮:

__block NSString *lastWord = nil;

[someNSStringHere enumerateSubstringsInRange:NSMakeRange(0, [someNSStringHere length]) options:NSStringEnumerationByWords | NSStringEnumerationReverse usingBlock:^(NSString *substring, NSRange subrange, NSRange enclosingRange, BOOL *stop) {
    lastWord = substring;
    *stop = YES;
}];
Run Code Online (Sandbox Code Playgroud)

(这也适用于非罗马语言; iOS 4 +/OS X 10.6+.)

基本说明:

-enumerateSubstringsInRage:options:usingBlock:做它在锡上所说的内容:它枚举子串,它由你传入的选项定义.NSStringEnumerationByWords说"我想要给我的话",并NSStringEnumerationReverse说"从字符串的末尾开始而不是从开始".

由于我们从最后开始,给我们的第一个单词substring将是字符串中的最后一个单词,所以我们设置lastWord为,然后将BOOL指向的to 设置stop为YES,这样枚举就会立即停止.

lastWord是被定义为当然的__block,所以我们可以把它的块里面,看看它之外,它的初始化nil,所以如果该字符串没有的话(例如,如果它是空的,或者是所有的标点符号)我们,当我们试图用不死机lastWord.

  • 好的解决方案 如果你想要超级健壮,可以添加`NSStringEnumerationLocalized`选项(考虑当前用户区域设置以进行单词分离).;-) (2认同)

JDx*_*JDx 11

尝试一下:

NSRange range = [someNSStringHere rangeOfString:@" " options:NSBackwardsSearch];
NSString *result = [someNSStringHere substringFromIndex:range.location+1];
Run Code Online (Sandbox Code Playgroud)