删除Objective-c中字符串中的最后一个单词

时间:2013-01-08 01:21:34

标签: objective-c

将字符串拆分为两部分的最有效方法是什么,按以下方式

一部分是字符串中的最后一个字,它跟在字符串中的最后一个空白字符后面 第二部分是字符串的其余部分

e.g。 “这是一句话” 一部分:“句子” 第二部分:“这是一个”//注意在这个字符串的末尾有空格

“这是一个” 一部分:“” 第二部分:“这是一个”

3 个答案:

答案 0 :(得分:16)

尝试这样的事情:

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"

答案 1 :(得分: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];
}

答案 2 :(得分:1)

您可以使用-[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"

此代码假设有几点需要注意。首先,它会修剪你在句子开头/结尾处提到的空格,但不会保留它。因此,如果这个空白对您来说真的很重要,那么您必须考虑到这一点。此外,如果句子为空或只包含一个单词(这样安全,只是不是特别复杂),它不会做任何特殊的事情。