2013-01-08 11 views
5

Was die effizienteste Art und Weise ist eine Zeichenfolge in zwei Teile, in der folgenden Art und Weiseentfernen letztes Wort in einer Zeichenfolge in Objective-c

Ein Teil ist das letzte Wort der Zeichenfolge zu teilen, die in dem letzten Leerzeichen folgen String der zweite Teil ist Rest der Zeichenfolge

zB „Dies ist ein Satz“ ein Teil: „Satz“ zweiter Teil: // „Dies ist ein“ da Hinweis ist Leerzeichen am Ende dieser Zeichenfolge

„Dies ist ein“ ein Teil: „“ zweiten Teil: „Dies ist ein“

+1

Werfen Sie einen Blick auf Barrys Antwort hier ... http://stackoverflow.com/ Fragen/1752946/how-to-get-the-first-n-words-from-a-Nsstring-in-Ziel-c –

Antwort

6

Haben Sie das letzte Wort entfernen möchten, semantisch gesprochen, oder tun Sie alles weg nach dem letzten Leerzeichen hacken wollen, das ist, was Sie beschrieben? Ich frage, weil sie nicht das Gleiche sind, abhängig von der Sprache des Textes.

Wenn Sie nach dem letzten Bit von Leerzeichen abzuhacken alles wollen, hier die anderen Antworten werden Sie gut tun. Aber wenn man das letzte Wort abhacken wollen, dann müssen Sie ein wenig tiefer graben und die Wort-Enumeration APIs verwenden:

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. Müssen Sie NSStringEnumerationLocalized einschließen, um die Gebietsschema-spezifischen Wortgrenzen zu erhalten? –

+0

Danke. Ja, ich habe versucht, alles nach dem letzten Leerzeichen (newLine) abzubrechen. – user462455

+0

@JesseRusak: Die Beschreibung für diese Konstante besagt, dass sie das Gebietsschema des Benutzers verwendet. Vermutlich bedeutet das Ausblenden, dass das Gebietsschema automatisch aus dem Text erkannt wird. –

0

Sie -[NSString componentsSeparatedByString:] und -[NSArray componentsJoinedByString:] können Sie eine Zeichenfolge in einzelne Komponenten (Wörter) und wieder zurück zu spalten:

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); 

Ausgang:

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" 

Dieser Code geht davon aus, ein paar Dinge bewusst zu sein. Zuerst werden die Leerzeichen, die Sie am Anfang/Ende des Satzes angegeben haben, abgeschnitten, aber nicht beibehalten. Wenn Ihnen also dieser Leerraum wirklich wichtig ist, müssen Sie Rechenschaft ablegen. Es macht auch nichts besonderes, wenn der Satz leer ist oder nur ein Wort enthält (so ist es sicher, nur nicht besonders ausgefeilt).

+0

Vielen Dank. Gibt es eine Möglichkeit, die oben durch die Handhabung sowohl Leerzeichen und neue Zeilen Zeichen zu erreichen, anstatt nur Leerzeichen – user462455

+0

Ja, es gibt. Ändern Sie 'NSCharacterSet * whitespace = [NSCharacterSet whitespaceCharacterSet];' to 'NSCharacterSet * whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];' –

16

so etwas wie dieses Versuchen:

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

sehr schön und klar – hariszaman

Verwandte Themen