Какой лучший способ обрезать пробелы из строки в Cocoa Touch? - PullRequest
23 голосов
/ 23 января 2009

Я пытаюсь определить, является ли строковое значение из пользовательского ввода (UITextField) "пустым", если оно не равно нулю. Проверка, не достаточно ли [textField.text isEqualToString:""], потому что я хочу избежать ввода пробелов / пробелов (например, несколько пробелов).

Похоже, что в этом сообщении StOv .

есть хорошее решение для моей конкретной проблемы .

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

NSString *strResult;
NSScanner* scanner = [NSScanner scannerWithString:textField.text];
BOOL hasValidChars = [scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] 
                                             intoString:&strResult];

// if hasValidChars == YES, we've got nonwhite space chars collected into strResult

Это явно работает только для моих конкретных обстоятельств, и даже в этом случае произойдет сбой, если первым символом будет пробел, а за данными, за которыми я хотел следовать. Итак, я понимаю, что Руби меня немного избаловал, но для обрезки струн в Какао должна быть проверенная и верная идиома.

А-а-а ответ уже там, мои извинения:

NSString's -stringByTrimmingCharactersInSet: сделает это:

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

Мне все еще любопытно узнать, есть ли у кого-то другие / предпочтительные способы сделать это.

Ответы [ 3 ]

49 голосов
/ 23 января 2009

Вы используете пробельные символы AndNewlineCharacterSet, хорошо. Но вместо использования scanUpToCharactersFromSet, почему бы не использовать stringByTrimmingCharactersInSet? Как то так ...

strResult = [strResult stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

РЕДАКТИРОВАТЬ: не понял, что вы уже нашли stringByTrimmingCharactersInSet, пока я не опубликовал это.

13 голосов
/ 01 октября 2010

То, что вы ищете, это

[string stringByReplacingOccurrencesOfString:@" " withString:@""].

Удаление пробела в середине строки не называется «обрезкой».

Обрезка по определению работает от краев.

1 голос
/ 29 мая 2015

Чтобы упростить это для себя и вместо создания подкласса, вы можете изменить существующие классы Apple и сделать что-то вроде

//
// NSString+MyExtensions.h
//

@interface NSString (MyExtensions)

- (NSString *)trimmed;

@end

и реализация

//
// NSString+MyExtensions.m
//

#import "NSString+MyExtensions.h"

@implementation NSString (MyExtensions)

- (NSString *)trimmed {
     return [self stringByTrimmingCharactersInSet:
             [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

@end

Так что теперь в любом месте вашего приложения, где вы используете NSString,
теперь вы можете звонить [@" hello world " trimmed], как показано ниже

//
// ViewController.m
//

#import "NSString+MyExtensions.h"

@implementation ViewController

- (void)viewDidLoad {

    NSString *string = @"      This is a string    ";

    NSLog(@"The original string: %@ \n The trimmed string: %@\n\n",
          string,
          [string trimmed]);

    string = @"                 ";

    if([string trimmed].length == 0)
        NSLog(@"%@", @"String is empty! :O");

}

@end

Что бы распечатать

The original string:       This is a string    
The trimmed string: This is a string

String is empty! :O
...