如何从NSString中删除前N个单词?
例如......“我去商店买牛奶。”我想删除前三个单词来制作它......
“这家商店买牛奶。” (注意'the'这个词之前没有空格。)谢谢!
答案 0 :(得分:3)
这个问题可以改为“如何从字符串中的第4个字开始获取子字符串?”,这稍微容易解决。我也在这里假设少于4个字的字符串应该变空。
无论如何,这里的主力是-enumerateSubstringsInRange:options:usingBlock:
,我们可以用来找到第四个单词。
NSString *substringFromFourthWord(NSString *input) {
__block NSUInteger index = NSNotFound;
__block NSUInteger count = 0;
[input enumerateSubstringsInRange:NSMakeRange(0, [input length]) options:(NSStringEnumerationByWords|NSStringEnumerationSubstringNotRequired) usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
if (++count == 4) {
// found the 4th word
index = substringRange.location;
*stop = YES;
}
}];
if (index == NSNotFound) {
return @"";
} else {
return [input substringFromIndex:index];
}
}
这种方法的工作方式是我们要求-enumerateSubstrings...
按字词进行枚举。当我们找到第四个单词时,我们将其起始位置保存并退出循环。现在我们有了第四个单词的开头,我们可以从该索引中获取子字符串。如果我们没有得到4个字,我们会返回@""
。
答案 1 :(得分:1)
最佳答案如下:How to get the first N words from a NSString in Objective-C?
您只需要更改范围。
答案 2 :(得分:1)
解决方案#1:只需按照手动方式执行:跳过前n个空格。
NSString *cutToNthWord(NSString *orig, NSInteger idx)
{
NSRange r = NSMakeRange(0, 0);
for (NSInteger i = 0; i < idx; i++) {
r = [orig rangeOfString:@" "
options:kNilOptions
range:NSMakeRange(NSMaxRange(r), orig.length - NSMaxRange(r))];
}
return [orig substringFromIndex:NSMaxRange(r)];
}
解决方案#2 (更干净):在空格处拆分字符串,加入结果数组的最后一个n - k
元素,其中k
是要跳过的字数,n
是单词总数:
NSString *cutToNthWord(NSString *orig, NSInteger idx)
{
NSArray *comps = [orig componentsSeparatedByString:@" "];
NSArray *sub = [comps subarrayWithRange:NSMakeRange(idx, comps.count - idx)];
return [sub componentsJoinedByString:@" "];
}
答案 3 :(得分:0)
离开我的头顶而不像Kevin Ballard的解决方案那样光滑:
NSString *phrase = @"I went to the store to buy milk.";
NSMutableString *words = [[NSMutableString alloc] init];
NSArray *words = [phrase componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:2];
[indexes addIndex:3];
[words removeObjectsAtIndexes:indexes];
NSString *output = [words componentsJoinedByString:@" "];
我的代码不适用于不使用单词之间空格的语言(如普通话和其他一些远东语言)。