获取NSString的最后一个字

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

NSArray *listItems = [someNSStringHere componentsSeparatedByString:@" "]; NSString *lastWordString = [NSString stringWithFormat:@"%@", listItems.lastObject]; anotherNSStringHere = lastWordString; 

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

感谢您的帮助!

如果你想成为超强大的:

 __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; }]; 

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

基本解释:

-enumerateSubstringsInRage:options:usingBlock:它在tin上表示:它枚举子string,它是由你传入的选项定义的。 NSStringEnumerationByWords说:“我想给我的话”,而NSStringEnumerationReverse说:“开始在string的结尾,而不是开始”。

由于我们从最后开始,在substring给我们的第一个单词将是substring中的最后一个单词,所以我们将lastWord设置lastWord ,然后将stop指向的BOOL设置为YES,以便枚举停止远。

lastWord当然被定义为__block所以我们可以在块内部设置它,并在外面看到它,它的初始化nil所以如果string没有字(例如,如果它是空的或是所有的标点符号),我们不会崩溃,当我们尝试使用lastWord

试试这个:

 NSRange range = [someNSStringHere rangeOfString:@" " options:NSBackwardsSearch]; NSString *result = [someNSStringHere substringFromIndex:range.location+1]; 

这很好,因为它也可以识别像@和#这样的符号,其中enumerateSubstringsInRange:不行。

 NSCharacterSet *charSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSArray *components = [someString componentsSeparatedByCharactersInSet:charSet]; NSString *lastWord = components.lastObject; 

如果你想使用一个正则expression式(如果你想在你的string末尾寻找更复杂的东西,这会很有用),你可以这样做:

 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\S+\\Z" options:0 error:nil]; NSTextCheckingResult *found = [regex firstMatchInString:inputString options:0 range:NSMakeRange(0, [inputString length])]; if (found.range.location != NSNotFound) result = [inputString substringWithRange:found.range]; 

最有效的方法可能是从string的末尾开始,检查每个字符,看它是否是您定义的单词的一部分,然后使用substringFromIndex:substringWithRange:提取您想要的单词。

您可以从string的末尾读取符号,并将它们从0索引处复制到结果string。 无论您是阅读空格还是逗号,结果string都将包含最后一个单词

你可以使用NSString的函数rangeOfSubstring:options:来确定它。 例如:

在string中search空格,使用向后search选项从string的末尾开始search。

NSRange r = [string rangeOfString:@" " options:NSBackwardsSearch];

这将findstring的最后一个单词的位置。 现在只需使用substringWithRange:获取substringWithRange:例如:

NSRange found = NSMakeRange(NSMaxRange(r), string.length - NSMaxRange(r)); NSString *foundString = [string substringWithRange:found];

r是早先的范围。

另外要小心,确保你检查r实际上是否存在。 如果string中只有一个单词,则r将是{NSNotFound, 0}

希望我能帮助!