5

次の方法で、文字列を 2 つの部分に分割する最も効率的な方法は何ですか?

1 つの部分は、文字列内の最後の空白文字に続く文字列の最後の単語です。2 番目の部分は、文字列の残りの部分です。

例: "これは文です" 1 つの部分: "文" 2 番目の部分: "これは " //この文字列の末尾に空白があることに注意してください

"これは " の一部です: "" 2 番目の部分: "

4

3 に答える 3

18

次のようなことを試してください:

NSString *str = @"this is a sentence";

// Search from back to get the last space character
NSRange range = [str rangeOfString: @" " options: NSBackwardsSearch];

// Take the first substring: from 0 to the space character
NSString *str1 = [str substringToIndex: range.location]; // @"this is a" 

// take the second substring: from after the space to the end of the string
NSString *str2 = [str substringFromIndex: range.location +1];  // @"sentence"
于 2013-01-08T01:35:08.313 に答える
6

意味的に言えば、最後の単語を削除したいですか、それとも、あなたが説明した最後の空白文字の後のすべてを切り捨てたいですか? テキストの言語によっては、実際には同じものではないため、質問しています。

最後の空白の後のすべてを切り落としたい場合は、ここの他の回答で問題ありません。しかし、最後の単語を切り捨てたい場合は、もう少し深く掘り下げて、単語列挙 API を使用する必要があります。

NSString *removeLastWord(NSString *str) {
    __block NSRange lastWordRange = NSMakeRange([str length], 0);
    NSStringEnumerationOptions opts = NSStringEnumerationByWords | NSStringEnumerationReverse | NSStringEnumerationSubstringNotRequired;
    [str enumerateSubstringsInRange:NSMakeRange(0, [str length]) options:opts usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
        lastWordRange = substringRange;
        *stop = YES;
    }];
    return [str substringToIndex:lastWordRange.location];
}
于 2013-01-08T01:42:20.390 に答える
2

とを使用-[NSString componentsSeparatedByString:]-[NSArray componentsJoinedByString:]て、文字列を個々のコンポーネント (単語) に分割し、元に戻すことができます。

NSString *sentence = @"This is a sentence";
NSLog(@"Sentence: \"%@\"", sentence);
NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet];
sentence = [sentence stringByTrimmingCharactersInSet:whitespace];

NSMutableArray *words = [[sentence componentsSeparatedByCharactersInSet:whitespace] mutableCopy];
NSString *lastWord = [words lastObject];
[words removeLastObject];
NSString *firstPart = [words componentsJoinedByString:@" "];

NSLog(@"Last word: \"%@\" First part: \"%@\"", lastWord, firstPart);

出力:

2013-01-07 18:36:50.566 LastWord[42999:707] Sentence: "This is a sentence"
2013-01-07 18:36:50.569 LastWord[42999:707] Last word: "sentence" First part: "This is a"

このコードは、いくつかの注意事項を前提としています。まず、文の先頭/末尾から言及した空白を削除しますが、保持しません。したがって、その空白が実際に重要な場合は、考慮する必要があります。また、文が空だったり、単語が 1 つしか含まれていない場合でも、特別なことは何もしません (この方法は安全ですが、あまり洗練されていません)。

于 2013-01-08T01:34:26.767 に答える