什麼是一個字符串分割成兩個部分,按以下方式最有效的方式刪除最後一個字
一部分是跟隨在最後空白字符的字符串的最後一個字字符串 第二部分是字符串的其餘部分
例如 「這是一句」 一部分:「句」 第二部分:「這是一個」 //注意有空格在這個字符串的結尾
「這是一個」 一部分:「」 第二部分:「這是一個」
什麼是一個字符串分割成兩個部分,按以下方式最有效的方式刪除最後一個字
一部分是跟隨在最後空白字符的字符串的最後一個字字符串 第二部分是字符串的其餘部分
例如 「這是一句」 一部分:「句」 第二部分:「這是一個」 //注意有空格在這個字符串的結尾
「這是一個」 一部分:「」 第二部分:「這是一個」
你要刪除的最後一個字,語義上說,還是要最後一個空白字符後砍事事休,這是你所描述的?我問,因爲他們實際上不是同一件事,這取決於文本的語言。
如果你想在最後一個空白位後砍掉所有的東西,其他的答案在這裏會做得很好。但是,如果你想砍掉最後一個單詞,那麼你需要深入一點,並使用枚舉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];
}
+1。您是否需要包含NSStringEnumerationLocalized,以獲取特定於語言環境的單詞邊界? –
謝謝。是的,我希望在最後一個空格(newLine)字符後切斷所有內容。 – user462455
@JesseRusak:該常量的說明使用用戶的語言環境。據推測,將其關閉意味着它會自動檢測文本中的語言環境。 –
您可以使用-[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"
此代碼假定需要注意的幾件事情。首先,它修剪你在句子開頭/結尾提到的空格,但不保留它。所以如果這個空白對你來說真的很重要,你就必須考慮。此外,如果句子爲空或只包含一個單詞(這是安全的,只是不是特別複雜),它不會做任何特殊的事情。
謝謝。有沒有辦法通過處理空白和換行符來實現上述目的,而不僅僅是空白 – user462455
是的,有。更改'NSCharacterSet * whitespace = [NSCharacterSet whitespaceCharacterSet];'爲'NSCharacterSet * whitespace = ['NSCharacterSet whitespaceAndNewlineCharacterSet];' –
嘗試是這樣的:
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"
非常好和清晰 – hariszaman
看看巴里的答案在這裏... http://stackoverflow.com/問題/ 1752946/how-to-first-n-words-from-a-nsstring-in-objective-c –