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".

Raju
quelle

Antworten:

280

Du könntest benutzen:

NSString *stringWithoutSpaces = [myString 
   stringByReplacingOccurrencesOfString:@" " withString:@""];
Tom Jefferys
quelle
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:@""];
Jim Dovey
quelle
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.

visakh7
quelle
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

Mitesh Khatri
quelle
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)];
Justin
quelle
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.

Kamleshwar
quelle