Видалити символи з 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

мені це подобається! Я хочу видалити всі спеціальні символи з номера телефону і зберегти лише цифри.
Карім

набагато простіше: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Даніель

3
Обрізання видаляє відповідні символи лише тоді, коли вони трапляються на початку та в кінці рядка, тому буде статися `ABCDEF` A B C D E F.
Jim Dovey

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
Ні, він лише видаляє пробіли з початку та кінця рядка, а не пробіли між іншими символами.
Jim Dovey

@JimDovey Я вже згадую про це у своєму коментарі. # Це буде працювати як метод TRIM. Це видалить усі передні та задні простори #
Мітеш Хатрі

2
@MiteshKhatri Ви робите, але це все одно не вирішує початкову проблему, яка полягає у видаленні всього пробілу з середини рядка, а не лише пробілів, що ведуть і відстають.
Jim Dovey

@JimDovey для видалення всіх пробілів використовуйте код нижче: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Мітеш Хатрі

1
Це все одно видалить лише пробільні символи ASCII; такі речі, як пробіли нульової ширини, пробіли Unicode, нові рядки, стрічки форм, вкладки, вертикальні вкладки тощо, все ще залишатимуться в рядку. Звідси існування [NSCharacterSet whitespaceCharacterSet]і [NSCharacterSet whitespaceAndNewlineCharacterSet].
Jim Dovey

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.