Domanda

Sto cercando di determinare se un valore di stringa da un input dell'utente (UITextField) è "vuoto". se non è zero. Verifica se [textField.text isEqualToString: " "] non è abbastanza perché voglio evitare qualsiasi input di spazi bianchi (come dire alcuni caratteri di spazio).

Sembra che ci sia un'indicazione di una buona soluzione per il mio problema particolare in questo post StOv .

Fondamentalmente va qualcosa del genere, ma sospetto che ci debba (o dovrebbe) essere un modo migliore:

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

Questo chiaramente funziona solo per la mia particolare circostanza, e anche allora fallirebbe se il primo personaggio fosse uno spazio ma i dati che volevo seguissero. Quindi, mi rendo conto di essere stato un po 'viziato da Ruby, ma ci deve essere un idioma provato e vero per tagliare le corde in Cocoa.

Aaae la risposta è già là fuori, le mie scuse:

-stringByTrimmingCharactersInSet di NSString: lo farebbe:

  

Restituisce una nuova stringa creata rimuovendola   da entrambe le estremità del ricevitore   personaggi contenuti in un dato   set di caratteri.

Sono ancora curioso di sapere se qualcuno ha altri / modi preferiti per farlo.

È stato utile?

Soluzione

Stai usando whitespaceAndNewlineCharacterSet, bene. Invece di usare scanUpToCharactersFromSet, perché non usare stringByTrimmingCharactersInSet? Qualcosa del genere ...

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

EDIT: non mi ero reso conto di aver già trovato stringByTrimmingCharactersInSet fino a quando non l'ho pubblicato.

Altri suggerimenti

Quello che stai cercando è

[string stringByReplacingOccurrencesOfString: @ " & Quot; withString:. @ " "]

L'eliminazione di uno spazio bianco nel mezzo di una stringa non si chiama "taglio".

Il taglio per definizione funziona dai bordi.

Per rendere questo più facile per te e invece di creare una sottoclasse, puoi modificare le classi Apple esistenti e fare qualcosa del genere

//
// NSString+MyExtensions.h
//

@interface NSString (MyExtensions)

- (NSString *)trimmed;

@end

e l'implementazione

//
// NSString+MyExtensions.m
//

#import "NSString+MyExtensions.h"

@implementation NSString (MyExtensions)

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

@end

Quindi ora in qualsiasi punto della tua app che usi un NSString ,
ora puoi chiamare [@ " ciao mondo " tagliato] come sotto

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

Che verrebbe stampato

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

String is empty! :O
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top