Zeichen aus NSString entfernen?


95
NSString *myString = @"A B C D E F G";

Ich möchte die Leerzeichen entfernen, daher wäre die neue Zeichenfolge "ABCDEFG".

Antworten:


280

Du könntest benutzen:

NSString *stringWithoutSpaces = [myString 
   stringByReplacingOccurrencesOfString:@" " withString:@""];

Bitte können Sie Codefragmente zur besseren Lesbarkeit in einer monospaced Schriftart formatieren. Gegenwärtig ist es etwas schwierig, die erste Saite zu unterscheiden
Mike Abdullah

4
Beachten Sie, dass "Vorkommen" mit zwei Rs geschrieben wird.

plus 1 in der Hoffnung, 256 zu erreichen. smh
Will Von Ullrich

Dies funktioniert NUR, wenn sich die 'Leerzeichen' gut verhalten. ASCII-Wert = 32 (% 20) Zeichen. Verwenden Sie die folgende Lösung von Jim Dovey, um ALLE möglichen Leerzeichen zu entfernen.
Linasses

80

Wenn Sie mehr als ein Leerzeichen gleichzeitig oder ein Leerzeichen unterstützen möchten, können Sie dies tun:

NSString* noSpaces =
    [[myString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
                           componentsJoinedByString:@""];

5
Es ist nützlicher für den allgemeinen Gebrauch.
mxg

ich mag das! Ich möchte alle Sonderzeichen in einer Telefonnummer entfernen und nur Ziffern behalten.
Karim

viel einfacher: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Daniel

3
Beim Zuschneiden werden übereinstimmende Zeichen nur entfernt, wenn sie am Anfang und Ende der Zeichenfolge auftreten, sodass "ABCDEF" wird A B C D E F.
Jim Dovey

11

Entnommen aus NSString

stringByReplacingOccurrencesOfString:withString:

Gibt eine neue Zeichenfolge zurück, in der alle Vorkommen einer Zielzeichenfolge im Empfänger durch eine andere angegebene Zeichenfolge ersetzt werden.

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

Parameter

Ziel

The string to replace.

Ersatz

The string with which to replace target.

Rückgabewert

Eine neue Zeichenfolge, in der alle Vorkommen von Zielen im Empfänger durch Ersetzen ersetzt werden.


11

Alles oben wird gut funktionieren. Aber die richtige Methode ist folgende:

yourString = [yourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

Es funktioniert wie eine TRIM-Methode. Es werden alle vorderen und hinteren Leerzeichen entfernt.

Vielen Dank


7
Nein, es werden nur Leerzeichen am Anfang und Ende der Zeichenfolge entfernt, keine Leerzeichen zwischen anderen Zeichen.
Jim Dovey

@ JimDovey Ich erwähne dieses Ding bereits in meinem Kommentar. # Es wird wie eine TRIM-Methode funktionieren. Es wird alle vorderen und hinteren Leerzeichen entfernen. #
Mitesh Khatri

2
@MiteshKhatri Sie tun es, aber es löst immer noch nicht das ursprüngliche Problem, nämlich alle Leerzeichen aus der Mitte der Zeichenfolge zu entfernen, nicht nur führende und nachfolgende Leerzeichen.
Jim Dovey

@JimDovey zum Entfernen aller Leerzeichen verwenden Sie den folgenden Code: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Mitesh Khatri

1
Dadurch werden immer noch nur ASCII-Leerzeichen entfernt. Dinge wie Leerzeichen mit der Breite Null, nicht unterbrechende Unicode-Leerzeichen, Zeilenumbrüche, Formularvorschübe, Registerkarten, vertikale Registerkarten usw. bleiben weiterhin in der Zeichenfolge. Daher die Existenz von [NSCharacterSet whitespaceCharacterSet]und [NSCharacterSet whitespaceAndNewlineCharacterSet].
Jim Dovey

6

Wenn die Zeichenfolge veränderbar ist , können Sie sie mithilfe des folgenden Formulars an Ort und Stelle transformieren:

[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

Dies ist auch nützlich, wenn das Ergebnis eine veränderbare Instanz einer Eingabezeichenfolge sein soll:

NSMutableString * string = [concreteString mutableCopy];
[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

3

Sie können dies versuchen

- (NSString *)stripRemoveSpaceFrom:(NSString *)str {
    while ([str rangeOfString:@"  "].location != NSNotFound) {
        str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
    }
    return str;
}

Hoffe das wird dir helfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.