Удалить символы из 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.

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

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

висах7
источник
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;
}

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

Камлешвар
источник