Удалить символы из NSString?


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

Я хочу удалить пробелы, чтобы новая строка была «ABCDEFG».

Ответы:


280

Вы можете использовать:

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

Вы можете отформатировать фрагменты кода моноширинным шрифтом для удобства чтения. В настоящее время отличить первую струну немного сложно
Майк Абдулла

4
Обратите внимание, что «вхождения» пишется с двумя буквами r.

плюс 1 в надежде достичь 256. smh
Will Von Ullrich

Это работает ТОЛЬКО в том случае, если «пробелы» представляют собой корректное значение ASCII = 32 (% 20) символа. Чтобы удалить ВСЕ возможные символы пробела, используйте решение Джима Дови ниже.
Linasses

80

Если вы хотите поддерживать более одного пробела за раз или поддерживать любые пробелы, вы можете сделать это:

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

5
Это более полезно для общего использования.
mxg 06

мне это нравится! Я хочу удалить все специальные символы в номере телефона и оставить только цифры.
Карим

намного проще: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Даниэль

3
Обрезка удаляет совпадающие символы только тогда, когда они встречаются в начале и конце строки, поэтому `ABCDEF` станет A B C D E F.
Джим Дови

11

Взято из NSString

stringByReplacingOccurrencesOfString:withString:

Возвращает новую строку, в которой все вхождения целевой строки в получателе заменены другой заданной строкой.

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

Параметры

цель

The string to replace.

замена

The string with which to replace target.

Возвращаемое значение

Новая строка, в которой все вхождения цели в приемнике заменяются на замену.


11

Все выше будет работать нормально. Но правильный метод такой:

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

Он будет работать как метод TRIM. Он удалит все переднее и заднее пространство.

Спасибо


7
Нет, он удаляет только пробелы в начале и конце строки, а не пробелы между другими символами.
Джим Дови

@JimDovey Я уже упоминал об этом в своем комментарии. # Он будет работать как метод TRIM. Он удалит все передние и задние пробелы. #
Митеш Хатри

2
@MiteshKhatri Да, но это все еще не решает исходную проблему, которая заключается в удалении всех пробелов из середины строки, а не только начальных и конечных пробелов.
Джим Дови

@JimDovey для удаления всех пробелов используйте следующий код: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Mitesh Khatri

1
Это все равно удалит только символы пробела ASCII; такие вещи, как пробелы нулевой ширины, неразрывные пробелы Unicode, новые строки, каналы форм, табуляции, вертикальные табуляции и т. д., по-прежнему останутся в строке. Отсюда существование [NSCharacterSet whitespaceCharacterSet]и [NSCharacterSet whitespaceAndNewlineCharacterSet].
Джим Дови

6

если строка изменяема , вы можете преобразовать ее на месте, используя эту форму:

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

это также полезно, если вы хотите, чтобы результат был изменяемым экземпляром входной строки:

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

3

Вы можете попробовать это

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

Надеюсь, это поможет вам.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.