Frage

Ich bin auf der Suche, ob ein String-Wert aus einer Benutzereingabe (UITextField) ist „leer“, um festzustellen, ob es nicht gleich Null ist. Prüfen, ob [textField.text isEqualToString:""] nicht genug ist, weil ich eine leere / Leerzeichen Eingabe vermeiden will (wie sagt ein paar Leerzeichen).

Es scheint ein Hinweis auf eine gute Lösung für mein besonderes Problem in dieser 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

Dies zeigt deutlich funktioniert nur für meinen besonderen Umstand, und selbst dann wäre es fehl, wenn das erste Zeichen ein Raum ist, aber die Daten, die ich gefolgt wollte. Also, ich weiß, ich habe von Ruby ein wenig verdorben gewesen, aber es muss ein bewährtes und Idiom seines für Streicher in Cocoa trimmt.

Uuuund die Antwort schon da draußen, ich entschuldige mich:

NSString die -stringByTrimmingCharactersInSet: würde es tun:

  

Gibt einen neuen String aus, indem   von beiden Enden des Empfängers   Zeichen in einem bestimmten enthaltenen   Zeichensatz.

Ich bin immer noch neugierig zu hören, wenn jemand andere / bevorzugte Art und Weise, dies zu tun hat.

War es hilfreich?

Lösung

Sie verwenden whitespaceAndNewlineCharacterSet, gut. Doch statt scanUpToCharactersFromSet zu verwenden, warum nicht stringByTrimmingCharactersInSet verwenden? So etwas wie dies ...

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

EDIT:. Haben Sie nicht erkennen Sie schon gefunden stringByTrimmingCharactersInSet bis ich gepostet

Andere Tipps

Was Sie suchen ist

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

Löschen von Leerraum in der Mitte einer Zeichenfolge wird nicht genannt ‚Beschneiden‘.

definitions Trimmen arbeitet von den Rändern.

Um diese leichter auf sich selbst zu machen und stattdessen eine Unterklasse zu machen, können Sie vorhandene Apple-Klassen ändern und tun so etwas 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 Ihrer Anwendung, die Sie eine NSString verwenden, Wie können Sie jetzt [@" hello world " trimmed] wie unter

nennen
//
// 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top