Какой лучший способ обрезать пробел из строки в Cocoa Touch?
Я ищу, чтобы определить, является ли строковое значение из пользовательского ввода (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
Это явно работает только для моего конкретного обстоятельства, и даже тогда оно потерпит неудачу, если первый символ будет пространством, но данные, которые я хотел, следовали. Итак, я понимаю, что я немного испорчен Ruby, но в трюках строки Cocoa должна быть проверенная и истинная идиома.
Aaaand ответ уже есть, мои извинения:
NSString -stringByTrimmingCharactersInSet:
сделает это:
Возвращает новую строку, сделанную путем удаления с обоих концов приемника символы, содержащиеся в данном набор символов.
Мне все еще интересно узнать, есть ли у кого-нибудь другие/предпочтительные способы сделать это.
Ответы
Ответ 1
Вы используете whitespaceAndNewlineCharacterSet, хорошо. Но вместо использования scanUpToCharactersFromSet, почему бы не использовать stringByTrimmingCharactersInSet? Что-то вроде этого...
strResult = [strResult stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
EDIT: Не понял, что вы уже нашли stringByTrimmingCharactersInSet до тех пор, пока я не разместил это.
Ответ 2
То, что вы ищете, это
[string stringByReplacingOccurrencesOfString:@" " withString:@""]
.
Удаление пробела в середине строки не называется "обрезкой".
Обрезка по определению работает с краями.
Ответ 3
Чтобы сделать это проще для себя и вместо создания подкласса, вы можете изменить существующие классы 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