2009-06-17 12 views
16

Wie kann ich das erste \ n Zeichen aus einem NSString entfernen?Entfernen Sie Newline-Zeichen aus der ersten Zeile von NSString

Edit: Nur um zu klären, was ich tun möchte, ist: Wenn die erste Zeile der Zeichenfolge ein \ n Zeichen enthält, löschen Sie es sonst nichts tun.

dh: Wenn die Zeichenfolge wie folgt aus:

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

und entgegengesetzt einer Zeichenfolge, die nicht eine neue Zeile in der ersten Zeile enthalten: es klarer

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

Ich hoffe, das macht .

+0

Ihre Bearbeitung macht die Frage tatsächlich weniger klar. Vom Konzept her würde "die erste Zeile einer Zeichenkette", wenn überhaupt, für mich alle Zeichen bedeuten, die bis zur ersten neuen Zeile in der Zeichenkette reichen. Wenn Sie etwas anderes als "von der ersten Zeile" meinen, müssen Sie möglicherweise noch einmal klären. –

+0

Was Quinn gesagt hat. Per Definition muss die erste Zeile einen Zeilenumbruch enthalten. Ansonsten hat die Zeichenfolge nur eine Zeile. – Chuck

Antwort

11

Diese den Trick tun sollten:

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

Dies hat den Nachteil, dass entweder (1) eine veränderbare Zeichenfolge zurückgibt oder (2) eine unveränderliche Kopie erfordert, um dies zu vermeiden. Verwenden Sie -stringByReplacingOccurrencesOfString: withString: options: range: um dies effizienter zu machen. Meine Antwort enthält Details und ein Codebeispiel. –

39
[string stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]] 

wird Ihre Zeichenfolge von jeder Art von Zeilenumbrüchen trimmen, wenn Sie das möchten.

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

wird genau das tun, was Sie fragen und Newline entfernen, wenn es in der Zeichenfolge das erste Zeichen ist

+1

Optionen: Nil sollte Optionen sein: 0 –

+0

Nil == NULL == 0 in C++. nil == NULL == (void *) 0 in C. NSStringCompareOptions ist typedef NSUInteger, das 32-Bit auf 32-Bit-Plattformen und 64-Bit auf 64-Bit-Plattformen ist. Ganzzahlige Literale anstelle von benannten Konstanten gehen meinem Empfinden entgegen;) – monowerker

+1

@monowerker: Dies ist kein C++. Ich erkenne, dass Null einfach als Null definiert ist. Der Xcode-Compiler aus irgendeinem Grund in 3.0 gibt Ihnen eine Warnung, mit 0 behebt dies. Seltsam, aber genau das passiert. –

6

Anstatt eine NSMutableString Erstellen und Verwenden von ein paar Aufrufe beibehalten/freigeben, Sie können nur die ursprüngliche Zeichenfolge verwenden und den Code vereinfachen, indem Sie stattdessen Folgendes verwenden: (erfordert 10.5+)

(Siehe -stringByReplacingOccurrencesOfString:withString:options:range: für weitere Details.)

Das Ergebnis des Aufrufs letzten Aufruf Methode auch sicher wieder original zugeordnet werden kann, wenn Sie Autorelease, was es zuerst so dass Sie den Speicher nicht auslaufen.

+0

+1 Das ist viel besser als meine Lösung. Diese spezielle Methode ist nur in Version 10.5 und höher verfügbar, aber das sollten die meisten Systeme jetzt sein, was mit 10.6 in Kürze kommen wird. –

+0

Hervorragender Fang auf 10.5+ für diese Methode, das hatte ich vergessen.Ich habe das Glück, dass ich mir keine Sorgen mehr um den Tiger-Support machen muss. :-) –

Verwandte Themen