正如标题所示,我想从NSString中得到最后一个字。 我想使用这段代码:
NSArray *listItems = [someNSStringHere componentsSeparatedByString:@" "];
NSString *lastWordString = [NSString stringWithFormat:@"%@", listItems.lastObject];
anotherNSStringHere = lastWordString;
但我认为NSArray会花一些时间加载它是否很大(而且它很大),并且它不会识别用逗号分隔的单词。
感谢您的帮助!
答案 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}
希望我能帮忙!
本