2013-01-08 163 views
5

什麼是一個字符串分割成兩個部分,按以下方式最有效的方式刪除最後一個字

一部分是跟隨在最後空白字符的字符串的最後一個字字符串 第二部分是字符串的其餘部分

例如 「這是一句」 一部分:「句」 第二部分:「這是一個」 //注意有空格在這個字符串的結尾

「這是一個」 一部分:「」 第二部分:「這是一個」

+1

看看巴里的答案在這裏... http://stackoverflow.com/問題/ 1752946/how-to-first-n-words-from-a-nsstring-in-objective-c –

回答

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]; 
} 
+0

+1。您是否需要包含NSStringEnumerationLocalized,以獲取特定於語言環境的單詞邊界? –

+0

謝謝。是的,我希望在最後一個空格(newLine)字符後切斷所有內容。 – user462455

+0

@JesseRusak:該常量的說明使用用戶的語言環境。據推測,將其關閉意味着它會自動檢測文本中的語言環境。 –

0

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

此代碼假定需要注意的幾件事情。首先,它修剪你在句子開頭/結尾提到的空格,但不保留它。所以如果這個空白對你來說真的很重要,你就必須考慮。此外,如果句子爲空或只包含一個單詞(這是安全的,只是不是特別複雜),它不會做任何特殊的事情。

+0

謝謝。有沒有辦法通過處理空白和換行符來實現上述目的,而不僅僅是空白 – user462455

+0

是的,有。更改'NSCharacterSet * whitespace = [NSCharacterSet whitespaceCharacterSet];'爲'NSCharacterSet * whitespace = ['NSCharacterSet whitespaceAndNewlineCharacterSet];' –

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" 
+0

非常好和清晰 – hariszaman