将字符串拆分为两部分的最有效方法是什么,按以下方式
一部分是字符串中的最后一个字,它跟在字符串中的最后一个空白字符后面 第二部分是字符串的其余部分
e.g。 “这是一句话” 一部分:“句子” 第二部分:“这是一个”//注意在这个字符串的末尾有空格
“这是一个” 一部分:“” 第二部分:“这是一个”
答案 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"
此代码假设有几点需要注意。首先,它会修剪你在句子开头/结尾处提到的空格,但不会保留它。因此,如果这个空白对您来说真的很重要,那么您必须考虑到这一点。此外,如果句子为空或只包含一个单词(这样安全,只是不是特别复杂),它不会做任何特殊的事情。