2009-01-23 10 views
23

Czekam na określenie, czy wartość ciągu od danych wejściowych użytkownika (UITextField) jest "pusta", jeśli nie jest zerowa. Sprawdzanie, czy [textField.text isEqualToString:""] jest niewystarczające, ponieważ chcę uniknąć wprowadzania pustych/białych znaków (np. Powiedz kilka znaków spacji).Jaki jest najlepszy sposób przycinania białych znaków ze sznurka w kakao Touch?

Wydaje się, że istnieje wskazanie dobrego rozwiązania dla mojego konkretnego problemu in this StOv post.

Zasadniczo idzie coś takiego, ale podejrzewam, że nie ma (lub powinien) być lepszy sposób:

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 

To wyraźnie działa tylko dla mojej konkretnej sytuacji, a nawet jeśli to nie powieść, jeśli pierwsza postać była przestrzenią, ale dane, które chciałem, poszły w ich ślady. Tak więc zdaję sobie sprawę, że Ruby trochę mnie zepsuła, ale musi istnieć wypróbowany i prawdziwy idiom służący do przycinania strun w kakao.

Aaaand odpowiedź jest już tam, moje przeprosiny:

NSString na -stringByTrimmingCharactersInSet: byłoby to zrobić:

Zwraca nowy łańcuch wykonany przez usunięcie z obu końcach odbiornika znaków zawartych w danym zestawie znaków .

Wciąż jestem ciekawy, czy ktoś ma inne/preferowane sposoby robienia tego.

+0

String.length> 0 – elliotrock

Odpowiedz

48

Używasz whitespaceAndNewlineCharacterSet, dobrze. Ale zamiast korzystać z scanUpToCharactersFromSet, dlaczego nie używać stringByTrimmingCharactersInSet? Coś takiego ...

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

EDIT: Nie zdawałem sobie sprawy cię już znaleziono stringByTrimmingCharactersInSet aż po Zamieściłem ten.

+1

nie martwi, ktoś powinien dostać kredyt na odpowiedź, a ja czuję się jak narzędzie delegowania to sam ;-) –

+0

jedno pytanie o ciąg wyniku. Wygląda na to, że jest to automatycznie wydany ciąg. Więc powinien zostać zwolniony po użyciu, prawda? –

+0

Dzięki stary. naprawdę pomocny. Jeszcze raz dziękuję –

13

Co szukasz jest

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

Usuwanie białej spacji w środku ciągu nie jest nazywane "przycinaniem".

Przycinanie według definicji działa na krawędziach.

2

Aby to łatwiej na siebie i zamiast tworzenia podklasy, można modyfikować istniejących klas Apple i zrobić coś podobnego

// 
// NSString+MyExtensions.h 
// 

@interface NSString (MyExtensions) 

- (NSString *)trimmed; 

@end 

i realizacji

// 
// NSString+MyExtensions.m 
// 

#import "NSString+MyExtensions.h" 

@implementation NSString (MyExtensions) 

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

@end 

więc teraz w dowolnym miejscu Aplikacja, której używasz: NSString,
Możesz teraz zadzwonić pod numer [@" hello world " trimmed], jak poniżej:

// 
// 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 

Które wydrukować

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

String is empty! :O 
Powiązane problemy