2009-01-23 8 views
23

Ich suche, um festzustellen, ob ein Zeichenfolgewert aus einer Benutzereingabe (UITextField) "leer" ist, wenn es nicht Null ist. Überprüfen, ob nicht ganz genug ist, weil ich keine Leerzeichen/Whitespace-Eingabe (wie sagen wir ein paar Leerzeichen) vermeiden möchte.Was ist der beste Weg, Whitespace von einer Zeichenfolge in Cocoa Touch zu trimmen?

Es scheint einen Hinweis auf eine gute Lösung für mein spezielles Problem zu geben in this StOv post.

Im Grunde geht es so etwas, aber ich vermute, es muss (oder soll) ein besserer Weg:

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 

Diese eindeutig nur für meinen besonderen Umstand funktioniert, und selbst dann wäre es nicht, wenn das erste Zeichen war ein Leerzeichen, aber die Daten, die ich wollte, folgten. Also, ich merke, dass ich ein wenig von Ruby verwöhnt wurde, aber es muss ein erprobtes und wahres Idiom geben, um Strings in Cocoa zu trimmen.

Uuuund die Antwort schon da draußen, meine Entschuldigung:

NSString des -stringByTrimmingCharactersInSet: es tun würde:

Gibt eine neue Zeichenfolge gemacht von von beiden Enden des Empfängers Zeichen enthalten Entfernen in einem gegebenen Zeichensatz.

Ich bin immer noch neugierig zu hören, ob jemand andere/bevorzugte Möglichkeiten hat, dies zu tun.

+0

string.length> 0 – elliotrock

Antwort

48

Sie verwenden whitespaceAndNewlineCharacterSet, gut. Aber statt scanUpToCharactersFromSet verwenden, warum nicht verwenden Sie StringByTrimmingCharactersInSet? So etwas wie dies ...

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

EDIT: Haben Sie nicht erkennen, fand bereits stringByTrimmingCharactersInSet bis ich gepostet.

+1

keine Sorgen, sollte jemand Kredit für die Antwort bekommen, und ich würde wie ein Werkzeug das Gefühl, es selbst ;-) –

+0

Eine Frage, über die Entsendung Ergebniszeichenfolge Es sieht so aus, als wäre es eine automatisch freigegebene Zeichenfolge. Also sollte es nach dem Gebrauch freigegeben werden, oder? –

+0

Danke Kumpel. wirklich hilfreich. Noch einmal vielen Dank –

13

Was Sie suchen ist

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

Das Löschen von Leerzeichen in der Mitte eines Strings wird nicht als "Trimmen" bezeichnet.

Trimmen per Definition funktioniert von den Rändern.

2

Um diese leichter auf sich selbst zu machen und stattdessen eine Unterklasse zu machen, können Sie vorhandene Apple-Klassen ändern und etwas tun, wie

// 
// NSString+MyExtensions.h 
// 

@interface NSString (MyExtensions) 

- (NSString *)trimmed; 

@end 

und die Umsetzung

// 
// NSString+MyExtensions.m 
// 

#import "NSString+MyExtensions.h" 

@implementation NSString (MyExtensions) 

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

@end 

So, jetzt überall in Ihrem App, die Sie verwenden NSString,
können Sie jetzt anrufen [@" hello world " trimmed] wie unten

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

Welche

drucken würde
The original string:  This is a string  
The trimmed string: This is a string 

String is empty! :O