获得NSString的最后一个字

时间:2012-06-15 14:31:02

标签: objective-c ios

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

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

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

感谢您的帮助!

7 个答案:

答案 0 :(得分:27)

如果你想要超级健壮:

__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:执行它在锡上所说的内容:它枚举子字符串,这些子字符串由您作为选项传入的内容定义。 NSStringEnumerationByWords说“我想要给我的话”,NSStringEnumerationReverse说“从字符串的末尾开始而不是从开始”。

由于我们从最后开始,substring中给我们的第一个单词将是字符串中的最后一个单词,因此我们将lastWord设置为该单词,然后设置{{ 1 {}由BOOL指向YES,因此枚举立即停止。

stop当然定义为lastWord,因此我们可以将其设置在块内并在外部查看,并将其初始化为__block,以便字符串具有没有单词(例如,如果它是空的或者都是标点符号),当我们尝试使用nil时,我们不会崩溃。

答案 1 :(得分:11)

尝试一下:

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

答案 2 :(得分:3)

这很有效,因为它也能识别enumerateSubstringsInRange:不能做的@和#等符号。

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

答案 3 :(得分:2)

如果你想使用一个正则表达式(如果你想在你的字符串末尾开始变得更加复杂的话,这可能很有用),你可以这样做:

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

在字符串中搜索空格,使用向后搜索选项从字符串末尾开始搜索。

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

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

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

r是之前的范围。

另外要小心确保检查r确实存在。如果字符串中只有1个字,那么r将为{NSNotFound, 0}

希望我能帮忙!