Qual è il modo migliore per tagliare gli spazi bianchi da una stringa in Cocoa Touch?
-
19-08-2019 - |
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.
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