NSStringから最初のN個の単語をどのように削除しますか?
たとえば...「ミルクを買いに店に行った」最初の3つの単語を削除して作成します...
「ミルクを買う店」(「the」という単語の前にもスペースがないことに注意してください)。
ありがとう!
NSStringから最初のN個の単語をどのように削除しますか?
たとえば...「ミルクを買いに店に行った」最初の3つの単語を削除して作成します...
「ミルクを買う店」(「the」という単語の前にもスペースがないことに注意してください)。
ありがとう!
この質問は、「文字列の4番目の単語から始まる部分文字列を取得するにはどうすればよいですか?」と言い換えることができます。これは少し簡単に解決できます。また、ここでは、4語未満の文字列は空になると想定しています。
とにかく、ここでの主力は-enumerateSubstringsInRange:options:usingBlock:
、4番目の単語を見つけるために使用できるです。
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番目の単語が見つかったら、その開始位置を保存してループを終了します。4番目の単語の開始ができたので、そのインデックスから部分文字列を取得できます。4語を取得しなかった場合は、を返し@""
ます。
ベストアンサーはここにあります:Objective-CのNSStringから最初のN語を取得する方法は?
範囲を変更するだけです。
解決策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:@" "];
}
私の頭のてっぺんから、ケビンバラードの解決策ほど滑らかではありません:
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:@" "];
私のコードは、単語の間にスペースを使用しない言語(北京語やその他の極東言語など)では機能しません。