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

Odpowiedzi:


280

Możesz użyć:

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

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:@""];

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.


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


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)];

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.