2009-06-17 17 views
16

Come posso rimuovere il primo carattere \ n da un NSString?Rimuovi carattere di fine riga dalla prima riga di NSString

Modifica: Giusto per chiarire, quello che vorrei fare è: Se la prima riga della stringa contiene un carattere \ n, cancellarlo altrimenti non fare nulla.

cioè: se la stringa è come questo:

@"\nhello, this is the first line\nthis is the second line" 

e opposto a una stringa che non contiene un ritorno a capo nella prima riga:

@"hello, this is the first line\nthis is the second line." 

Spero che lo rende più chiaro .

+0

La modifica in realtà rende la domanda meno chiara. Concettualmente, "la prima riga di una stringa", se mai, significherebbe tutti i personaggi fino a (e forse includendo) la prima nuova riga nella stringa. Se intendi qualcosa di diverso da "prima linea", potrebbe essere necessario chiarire nuovamente. –

+0

Che cosa ha detto Quinn. Per definizione, la prima riga deve contenere una nuova riga. Altrimenti la stringa ha solo una linea. – Chuck

risposta

11

Questo dovrebbe fare il trucco:

NSString * ReplaceFirstNewLine(NSString * original) 
{ 
    NSMutableString * newString = [NSMutableString stringWithString:original]; 

    NSRange foundRange = [original rangeOfString:@"\n"]; 
    if (foundRange.location != NSNotFound) 
    { 
     [newString replaceCharactersInRange:foundRange 
           withString:@""]; 
    } 

    return [[newString retain] autorelease]; 
} 
+3

Questo ha lo svantaggio di entrambi (1) restituire una stringa mutabile o (2) che richiede una copia immutabile per evitarlo. Usa -stringByReplacingOccurrencesOfString: withString: options: range: per farlo in modo più efficiente. La mia risposta include dettagli e un esempio di codice. –

39
[string stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]] 

tagliare la stringa da qualsiasi tipo di newline, se è ciò che si desidera.

[string stringByReplacingOccurrencesOfString:@"\n" withString:@"" options:0 range:NSMakeRange(0, 1)] 

farà esattamente quello che chiedi e rimuovere a capo se è il primo carattere della stringa

+1

opzioni: nil dovrebbe essere opzioni: 0 –

+0

nil == NULL == 0 in C++. nil == NULL == (void *) 0 in C. NSStringCompareOptions è typedef NSUInteger che è a 32 bit su piattaforme a 32 bit e 64 bit su piattaforme a 64 bit. I letterali interi al posto delle costanti nominate vanno contro la mia sensibilità;) – monowerker

+1

@monowerker: Questo non è C++. Mi rendo conto che nil è semplicemente definito come zero. Il compilatore Xcode per qualche motivo nella 3.0 ti dà un avvertimento, usando 0 corregge questo. Strano, ma è quello che succede. –

6

Piuttosto che creare un NSMutableString e l'utilizzo di alcuni conservare/rilasciare le chiamate, è possibile utilizzare solo la stringa originale e semplificare il codice utilizzando invece: (richiede 10.5+)

NSRange foundRange = [original rangeOfString:@"\n"]; 
if (foundRange.location != NSNotFound) 
    [original stringByReplacingOccurrencesOfString:@"\n" 
             withString:@"" 
              options:0 
              range:foundRange]; 

(Vedi -stringByReplacingOccurrencesOfString:withString:options:range: per i dettagli.)

Il risultato dell'ultima chiamata al metodo di chiamata può anche essere assegnato in modo sicuro indietro originale SE si AutoRelease quello che c'è prima in modo da non perdano la memoria.

+0

+1 Questo è molto meglio della mia soluzione. Questo particolare metodo è disponibile solo nella versione 10.5 e successive, ma ora dovrebbe essere la maggior parte dei sistemi, con 10.6 che uscirà presto. –

+0

Eccellente presa su 10.5+ per questo metodo, me ne ero dimenticato.Sono abbastanza fortunato da non dovermi più preoccupare del supporto Tiger. :-) –

Problemi correlati