获取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}
希望我能帮助!
本