Usunąć znaki z NSString?

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

Chcę usunąć spacje, więc nowy ciąg byłby „ABCDEFG”.

Raju
źródło

Odpowiedzi:

280

Możesz użyć:

NSString *stringWithoutSpaces = [myString 
   stringByReplacingOccurrencesOfString:@" " withString:@""];
Tom Jefferys
źródło
Czy możesz sformatować fragmenty kodu czcionką o stałej szerokości, aby zapewnić czytelność. Obecnie rozróżnienie pierwszej struny jest trochę trudne
Mike Abdullah
4
Zwróć uwagę, że „wystąpienia” zapisywane są za pomocą dwóch r.
plus 1 w nadziei na osiągnięcie 256. smh
Will Von Ullrich
Działa to TYLKO wtedy, gdy „spacje” są dobrze zachowane. Wartość ASCII = 32 (% 20) znaków. Aby usunąć WSZYSTKIE możliwe znaki spacji, użyj rozwiązania Jima Doveya poniżej.
Linasses
80

Jeśli chcesz obsługiwać więcej niż jedną spację naraz lub dowolną białą spację, możesz to zrobić:

NSString* noSpaces =
    [[myString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
                           componentsJoinedByString:@""];
Jim Dovey
źródło
5
Jest bardziej przydatny do ogólnego użytku.
mxg
lubię to! Chcę usunąć wszystkie znaki specjalne z numeru telefonu i zachować tylko cyfry.
karim
dużo łatwiej: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Daniel
3
Przycinanie usuwa pasujące znaki tylko wtedy, gdy występują one na początku i na końcu ciągu, więc stałoby się „ABCDEF” A B C D E F.
Jim Dovey
11

Zaczerpnięte z NSString

stringByReplacingOccurrencesOfString:withString:

Zwraca nowy ciąg, w którym wszystkie wystąpienia ciągu docelowego w odbiorniku są zastępowane innym podanym ciągiem.

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

Parametry

cel

The string to replace.

zastąpienie

The string with which to replace target.

Wartość zwracana

Nowy ciąg, w którym wszystkie wystąpienia celu w odbiorniku są zastępowane przez zastąpienie.

visakh7
źródło
11

Wszystko powyżej będzie działać dobrze. Ale właściwa metoda jest taka:

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

Będzie działać jak metoda TRIM. Usunie wszystkie przestrzenie z przodu iz tyłu.

Dzięki

Mitesh Khatri
źródło
7
Nie, usuwa tylko spacje z początku i końca ciągu, a nie spacje między innymi znakami.
Jim Dovey
@JimDovey Wspomniałem już o tym w moim komentarzu. # Będzie działać jak metoda TRIM. Spowoduje to usunięcie wszystkich przednich i tylnych przestrzeni. #
Mitesh Khatri
2
@MiteshKhatri Robisz, ale nadal nie rozwiązuje to pierwotnego problemu, którym jest usunięcie wszystkich białych znaków ze środka ciągu, a nie tylko początkowych i końcowych białych znaków.
Jim Dovey
@JimDovey do usunięcia wszystkich spacji użyj poniższego kodu: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Mitesh Khatri
1
To nadal usunie tylko znaki spacji ASCII; rzeczy takie jak spacje o zerowej szerokości, nierozdzielające spacje Unicode, znaki nowej linii, kanały informacyjne, tabulatory, pionowe tabulatory i tak dalej pozostaną w ciągu. Stąd istnienie [NSCharacterSet whitespaceCharacterSet]i [NSCharacterSet whitespaceAndNewlineCharacterSet].
Jim Dovey
6

jeśli ciąg jest zmienny , możesz go przekształcić w miejscu za pomocą tego formularza:

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

jest to również przydatne, jeśli chcesz, aby wynik był mutowalną instancją ciągu wejściowego:

NSMutableString * string = [concreteString mutableCopy];
[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];
Justin
źródło
3

Możesz tego spróbować

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

Mam nadzieję, że to ci pomoże.

Kamleshwar
źródło