ios - truco - ¿Cómo puedo probar si una cadena está vacía en Objective C?
cómo saber cuándo una cadena es de oro (30)
¿Cómo puedo comprobar si una NSString
está vacía en el Objetivo C?
Versión rápida
Aunque esta es una pregunta del Objetivo C, necesitaba usar 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 un 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?
Deberías usar mejor esta categoría:
@implementation NSString (Empty)
- (BOOL) isWhitespace{
return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
}
@end
El primer enfoque es válido, pero no funciona si su cadena tiene espacios en blanco ( @" "
). Así que debes despejar 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, para que no tengas que escribir esta línea de monstruo:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
Ahora puedes usar:
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
Entonces, aparte del concepto básico de verificar una longitud de cadena menor que 1, es importante considerar el contexto profundamente. Los lenguajes humanos o de computadora o, de lo contrario, pueden tener diferentes definiciones de cadenas vacías y dentro de esos mismos idiomas, el contexto adicional puede cambiar aún más el significado.
Digamos que una cadena vacía significa "una cadena que no contiene ningún carácter significativo en el contexto actual".
Esto podría significar visualmente, ya que el color de fondo y el de fondo son los mismos en una cadena atribuida. Efectivamente vacio
Esto podría significar vacío de caracteres significativos. Todos los puntos o todos los guiones o todos los guiones bajos se pueden considerar vacíos. Además, el vacío de caracteres significativos significativos podría significar una cadena que no tiene caracteres que el lector entienda. Podrían ser caracteres en un lenguaje o conjunto de caracteres definidos como sin sentido para el lector. Podríamos definirlo de forma un poco diferente para decir que la cadena no forma palabras conocidas en un idioma determinado.
Podríamos decir que vacío es una función del porcentaje de espacio negativo en los glifos renderizados.
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 bajo rango ASCII (me sorprende que nadie los haya mencionado porque administran muchos sistemas y 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 conjunto contextual también es bastante importante.
La pertenencia a un conjunto de caracteres es una medida adicional muy importante Las secuencias significativas también son bastante comunes. (piense SETI o crypto o captchas) También existen conjuntos de contextos más abstractos adicionales.
Así que piense detenidamente antes de suponer que una cadena solo está vacía según la longitud o el espacio en blanco.
Es tan simple como if([myString isEqual:@""])
o if([myString isEqualToString:@""])
Está funcionando como un 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);
}
He comprobado una cadena vacía utilizando 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"];
}
Intenta lo siguiente
NSString *stringToCheck = @"";
if ([stringToCheck isEqualToString:@""])
{
NSLog(@"String Empty");
}
else
{
NSLog(@"String Not Empty");
}
La mejor manera en cualquier caso es verificar la longitud de la cadena dada. Para esto, si su cadena es myString, entonces el código es:
int len = [myString length];
if(len == 0){
NSLog(@"String is empty");
}
else{
NSLog(@"String is : %@", myString);
}
La mejor manera es usar la categoría.
Puede comprobar la siguiente función. Que tiene todas las condiciones para comprobar.
-(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 respuesta de Marc es correcta. Pero aprovecharé esta oportunidad para incluir un indicador al isEmpty
generalizado de Wil Shipley, 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);
}
Mira esto :
if ([yourString isEqualToString:@""])
{
NsLog(@"Blank String");
}
O
if ([yourString length] == 0)
{
NsLog(@"Blank String");
}
Espero que esto ayude.
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);
}
Pongo 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 self es nil, esta función nunca se llama. Volverá falso, lo que se desea.
Publicación muy útil, para agregar soporte NSDictionary y 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 que esta respuesta sea el duplicado de respuestas ya dadas, pero hice algunas modificaciones y cambios en el orden de verificación de 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;
}
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.
Puede verificar si su cadena está vacía o si no está usando 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 clase compartida diga UtilityClass y agregue este método para que pueda utilizar este método con solo llamar a través de su aplicación.
Puedes tener una cadena vacía de dos maneras:
1) @ "" // No contiene espacio
2) @ "" // Contiene espacio
Técnicamente ambas cadenas están vacías. Podemos escribir ambas cosas simplemente usando UNA Condición
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
NSLog(@"Empty String");
}
else
{
NSLog(@"String contains some value");
}
Puedes verificar fácilmente si la cadena está vacía con esto:
if ([yourstring isEqualToString:@""]) {
// execute your action here if string is empty
}
Simplemente revise la longitud de su cadena
if (!yourString.length)
{
//your code
}
un mensaje a NIL devolverá nil o 0, por lo que no es necesario probar para nil :).
Feliz codificación ...
Solo pasa tu 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;
}
Solo use una de las siguientes condiciones, 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
}
Tienes 2 métodos para verificar 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 métodos anteriores y conozca si la cadena está vacía o no.
Una de las mejores soluciones que he visto (mejor que la de Matt G) es esta función en línea mejorada que detecté en un repo 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);
}
- (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;
}
//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 (string.length == 0) stringIsEmpty;
if( [txtMobile.text length] == 0 )
{
[Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
NSLog(@"String is empty");
}
else{
NSLog(@"String is not empty");
}