¿Cómo pruebo si una cadena está vacía en el Objetivo C?

¿Cómo NSString si un NSString está vacío en el Objetivo C?

Puede verificar si [string length] == 0 . Esto comprobará si es una cadena válida pero vacía (@ ""), así como si es nula, ya que la length llamada en nil también devolverá 0.

La respuesta de Marc es correcta. Pero aprovecharé esta oportunidad para include un puntero a isEmpty 's generalized isEmpty , que compartió en su blog :

 static inline BOOL IsEmpty(id thing) { return thing == nil || ([thing respondsToSelector:@selector(length)] && [(NSData *)thing length] == 0) || ([thing respondsToSelector:@selector(count)] && [(NSArray *)thing count] == 0); } 

El primer enfoque es válido, pero no funciona si su cadena tiene espacios en blanco ( @" " ). Entonces debes borrar estos espacios en blanco antes de probarlo.

Este código borra todos los espacios en blanco en ambos lados de la cadena:

 [stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]; 

Una buena idea es crear una macro, por lo que no tiene que escribir esta línea monstruosa:

 #define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ] 

Ahora puedes usar:

 NSString *emptyString = @" "; if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!"); 

Una de las mejores soluciones que he visto (mejor que la de Matt G) es esta function en línea mejorada que recogí en algún repository de Git Hub (la de Wil Shipley, pero no puedo encontrar el enlace):

 // Check if the "thing" pass'd is empty static inline BOOL isEmpty(id thing) { return thing == nil || [thing isKindOfClass:[NSNull class]] || ([thing respondsToSelector:@selector(length)] && [(NSData *)thing length] == 0) || ([thing respondsToSelector:@selector(count)] && [(NSArray *)thing count] == 0); } 

Deberías usar mejor esta categoría:

 @implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0); } @end 

Puse esto:

 @implementation NSObject (AdditionalMethod) -(BOOL) isNotEmpty { return !(self == nil || [self isKindOfClass:[NSNull class]] || ([self respondsToSelector:@selector(length)] && [(NSData *)self length] == 0) || ([self respondsToSelector:@selector(count)] && [(NSArray *)self count] == 0)); }; @end 

El problema es que si uno mismo es nulo, esta function nunca se llama. Devolverá falso, lo que se desea.

Simplemente pase su cadena al siguiente método:

 +(BOOL)isEmpty:(NSString *)str { if(str.length==0 || [str isKindOfClass:[NSNull class]] || [str isEqualToString:@""]||[str isEqualToString:NULL]||[str isEqualToString:@"(null)"]||str==nil || [str isEqualToString:@"<null>"]){ return YES; } return NO; } 

Otra opción es verificar si es igual a @"" con isEqualToString: así:

 if ([myString isEqualToString:@""]) { NSLog(@"myString IS empty!"); } else { NSLog(@"myString IS NOT empty, it is: %@", myString); } 

Tiene 2 methods para comprobar si la cadena está vacía o no:

Supongamos que su nombre de cadena es NSString *strIsEmpty .

Método 1:

 if(strIsEmpty.length==0) { //String is empty } else { //String is not empty } 

Método 2:

 if([strIsEmpty isEqualToString:@""]) { //String is empty } else { //String is not empty } 

Elija cualquiera de los methods anteriores y conozca si la cadena está vacía o no.

Solo use una de las condiciones, if else , como se muestra a continuación:

Método 1:

 if ([yourString isEqualToString:@""]) { // yourString is empty. } else { // yourString has some text on it. } 

Método 2:

 if ([yourString length] == 0) { // Empty yourString } else { // yourString is not empty } 

Versión Swift

Aunque esta es una pregunta del Objetivo C, necesitaba utilizar NSString en Swift, así que también NSString una respuesta aquí.

 let myNSString: NSString = "" if myNSString.length == 0 { print("String is empty.") } 

O si NSString es opcional:

 var myOptionalNSString: NSString? = nil if myOptionalNSString == nil || myOptionalNSString!.length == 0 { print("String is empty.") } // or alternatively... if let myString = myOptionalNSString { if myString.length != 0 { print("String is not empty.") } } 

La versión normal de Swift String es

 let myString: String = "" if myString.isEmpty { print("String is empty.") } 

Ver también: ¿ Comprobar cadena vacía en Swift?

Puede comprobar si su cadena está vacía o no utilizando este método:

 +(BOOL) isEmptyString : (NSString *)string { if([string length] == 0 || [string isKindOfClass:[NSNull class]] || [string isEqualToString:@""]||[string isEqualToString:NULL] || string == nil) { return YES; //IF String Is An Empty String } return NO; } 

La mejor práctica es hacer que una class compartida diga UtilityClass y publique este método para que pueda usar este método simplemente llamándolo a través de su aplicación.

Publicación muy útil, para agregar el soporte de NSDictionary, así como un pequeño cambio

 static inline BOOL isEmpty(id thing) { return thing == nil || [thing isKindOfClass:[NSNull class]] || ([thing respondsToSelector:@selector(length)] && ![thing respondsToSelector:@selector(count)] && [(NSData *)thing length] == 0) || ([thing respondsToSelector:@selector(count)] && [thing count] == 0); } 

Puede ser esta respuesta es el duplicado de las respuestas ya dadas, pero hice algunas modificaciones y cambios en el order de verificar las condiciones. Por favor, consulte el siguiente código:

 +(BOOL)isStringEmpty:(NSString *)str { if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) { return YES; } return NO; } 

Simplemente comtesting tu longitud de string

  if (!yourString.length) { //your code } 

un post a NIL devolverá cero o 0, por lo que no es necesario probar nada :).

Feliz encoding …

Está funcionando como encanto para mí

Si el NSString es s

 if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) { NSLog(@"s is empty"); } else { NSLog(@"s containing %@", s); } 

Así que, aparte del concepto básico de verificar una longitud de cadena inferior a 1, es importante considerar profundamente el context. Los idiomas humanos o de computadora o de otra manera podrían tener definiciones diferentes de cadenas vacías y dentro de esos mismos idiomas, el context adicional puede cambiar aún más el significado.

Digamos que la cadena vacía significa "una cadena que no contiene caracteres significativos en el context actual".

Esto podría significar visualmente, ya que en color y color de background son los mismos en una cadena atribuida. Efectivamente vacío.

Esto podría significar vacío de caracteres significativos. Todos los puntos o todos los guiones o todos los guiones bajos pueden considerarse vacíos. Además, el vacío de significativos caracteres significativos podría significar una cadena que no tiene caracteres que el lector entiende. Podrían ser caracteres en un lenguaje o carácter definido como sin sentido para el lector. Podríamos definirlo un poco diferente para decir que la cadena no forma palabras conocidas en un idioma dado.

Podríamos decir que el vacío es una function del porcentaje de espacio negativo en los glifos representados.

Incluso una secuencia de caracteres no imprimibles sin representación visual general no está realmente vacía. Los personajes de control vienen a la mente. Especialmente el range bajo de ASCII (me sorprende que nadie haya mencionado esos sistemas ya que no son espacios en blanco, ya que normalmente no tienen glifos ni métricas visuales). Sin embargo, la longitud de la cadena no es cero.

Conclusión. La longitud sola no es la única medida aquí. La pertenencia al set contextual también es bastante importante.

La pertenencia al juego de caracteres es una medida adicional común muy importante. Las secuencias significativas también son bastante comunes. (piense en SETI o crypto o captchas) También existen otros sets de context más abstractos.

Entonces piense cuidadosamente antes de suponer que una cadena solo está vacía en function de la longitud o el espacio en blanco.

 - (BOOL)isEmpty:(NSString *)string{ if ((NSNull *) string == [NSNull null]) { return YES; } if (string == nil) { return YES; } if ([string length] == 0) { return YES; } if ([[string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) { return YES; } if([[string stringByStrippingWhitespace] isEqualToString:@""]){ return YES; } return NO; } 

La mejor manera es usar la categoría.
Puede verificar la siguiente function. Que tiene todas las condiciones para verificar.

 -(BOOL)isNullString:(NSString *)aStr{ if([(NSNull *)aStr isKindOfClass:[NSNull class]]){ return YES; } if ((NSNull *)aStr == [NSNull null]) { return YES; } if ([aStr isKindOfClass:[NSNull class]]){ return YES; } if(![[aStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]){ return YES; } return NO; } 

La mejor manera, en cualquier caso, es verificar la longitud de la cadena dada. Para esto, si tu cadena es myString, el código es:

  int len = [myString length]; if(len == 0){ NSLog(@"String is empty"); } else{ NSLog(@"String is : %@", myString); } 
 if (string.length == 0) stringIsEmpty; 

Mira esto :

 if ([yourString isEqualToString:@""]) { NsLog(@"Blank String"); } 

O

 if ([yourString length] == 0) { NsLog(@"Blank String"); } 

Espero que esto te ayude.

Puede comprobar fácilmente si la cadena está vacía con esto:

 if ([yourstring isEqualToString:@""]) { // execute your action here if string is empty } 

He comprobado una cadena vacía usando el siguiente código:

 //Check if we have any search terms in the search dictionary. if( (strMyString.text==(id) [NSNull null] || [strMyString.text length]==0 || strMyString.text isEqual:@"")) { [AlertView showAlert:@"Please enter a valid string"]; } 

Es tan simple como if([myString isEqual:@""]) o if([myString isEqualToString:@""])

 //Different validations: NSString * inputStr = @"Hey "; //Check length [inputStr length] //Coming from server, check if its NSNull [inputStr isEqual:[NSNull null]] ? nil : inputStr //For validation in allowed character set -(BOOL)validateString:(NSString*)inputStr { BOOL isValid = NO; if(!([inputStr length]>0)) { return isValid; } NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:@".-"]; [allowedSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]]; if ([inputStr rangeOfCharacterFromSet:[allowedSet invertedSet]].location == NSNotFound) { // contains only decimal set and '-' and '.' } else { // invalid isValid = NO; } return isValid; } 
 if(str.length == 0 || [str isKindOfClass: [NSNull class]]){ NSLog(@"String is empty"); } else{ NSLog(@"String is not empty"); } 
 if( [txtMobile.text length] == 0 ) { [Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)]; }