2013-01-08 12 views
5

Qual è il modo più efficace per dividere una stringa in due parti, nel seguente modoRimuovere ultima parola in una stringa in Objective-C

Una parte è l'ultima parola della stringa che segue l'ultimo carattere spazio bianco nel stringa La seconda parte è il resto della stringa

ad es. "Questa è una frase" da una parte: "sentenza" seconda parte: "Questo è un" // Nota: c'è spazio bianco alla fine di questa stringa

"Questo è un" una parte: "" seconda parte: "Questo è un"

+1

Date un'occhiata a risposta di Barry qui ... http://stackoverflow.com/ questions/1752946/how-to-get-the-first-n-words-from-a-nsstring-in-objective-c –

risposta

6

Vuoi rimuovere l'ultima parola, semanticamente parlando, o vuoi tagliare tutto fuori dopo l'ultimo carattere spazio bianco, che è quello che hai descritto? Sto chiedendo perché non sono in realtà la stessa cosa, a seconda della lingua del testo.

Se si vuole tagliare tutto dopo l'ultimo bit di spazio bianco, le altre risposte qui andranno bene. Ma se si vuole recidere l'ultima parola, allora avete bisogno di scavare un po 'più a fondo e utilizzare la parola API di enumerazione:

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. È necessario includere NSStringEnumerationLocalized, tuttavia, per ottenere i limiti delle parole specifiche della locale? –

+0

Grazie. Sì, stavo cercando di tagliare tutto dopo il carattere degli ultimi spazi bianchi (nuova riga) – user462455

+0

@JesseRusak: la descrizione per quella costante dice che utilizza le impostazioni locali dell'utente. Presumibilmente, lasciarlo spento significa rilevare automaticamente le impostazioni internazionali dal testo. –

0

è possibile utilizzare -[NSString componentsSeparatedByString:] e -[NSArray componentsJoinedByString:] per dividere una stringa in singoli componenti (parole) e viceversa:

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

uscita:

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" 

Questo codice presuppone alcune informazioni di cui tenere conto. In primo luogo, taglia lo spazio bianco che hai menzionato all'inizio/fine della frase, ma non lo conserva. Quindi se quello spazio è davvero importante per te, dovrai renderne conto. Inoltre, non fa nulla di speciale se la frase è vuota o contiene solo una parola (è sicuro in questo modo, ma non particolarmente sofisticato).

+0

Grazie. C'è un modo per ottenere quanto sopra gestendo sia spazi bianchi che caratteri di nuova riga, invece di spazi bianchi – user462455

+0

Sì, c'è. Modifica 'NSCharacterSet * whitespace = [NSCharacterSet whitespaceCharacterSet];' a 'NSCharacterSet * whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];' –

16

provare qualcosa di simile:

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

molto bello e chiaro – hariszaman

Problemi correlati