Как проверить, является ли строка пустой в Objective-C? - PullRequest
634 голосов
/ 22 мая 2009

Как проверить, является ли NSString пустым в Objective-C?

Ответы [ 30 ]

5 голосов
/ 01 июля 2014

Может быть, этот ответ является дубликатом уже предоставленных ответов, но я немного изменил и изменил порядок проверки условий. Пожалуйста, обратитесь ниже код:

+(BOOL)isStringEmpty:(NSString *)str
    {
        if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
            return YES;
       }
        return NO;
    }
4 голосов
/ 24 сентября 2014

Вы можете проверить, пуста ли ваша строка или нет, используя этот метод:

+(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;
}

Лучше всего сделать общий класс, скажем, UtilityClass и объявить этот метод, чтобы вы могли использовать этот метод, просто вызывая его из приложения.

4 голосов
/ 17 ноября 2014

У вас есть 2 способа проверить, является ли строка пустой или нет:

Предположим, что ваше строковое имя NSString *strIsEmpty.

Метод 1:

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

else
{
    //String is not empty
}

Метод 2:

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

else
{
    //String is not empty
}

Выберите любой из вышеперечисленных методов и узнайте, пустая строка или нет.

3 голосов
/ 15 сентября 2012

Очень полезный пост, чтобы добавить поддержку NSDictionary, а также одно небольшое изменение

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);
}
3 голосов
/ 27 мая 2016

Просто проверьте длину строки

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

сообщение NIL вернет ноль или 0, поэтому нет необходимости проверять ноль:).

Счастливого кодирования ...

2 голосов
/ 30 сентября 2013

Это работает как шарм для меня

Если NSString равно s

if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {

    NSLog(@"s is empty");

} else {

    NSLog(@"s containing %@", s);

}
2 голосов
/ 25 марта 2014

Таким образом, помимо основной концепции проверки длины строки меньше 1, важно глубоко изучить контекст. Языки человек или компьютер или иным образом могут иметь различные определения пустых строк, и в этих же языках дополнительный контекст может дополнительно изменить значение.

Допустим, пустая строка означает «строку, которая не содержит символов, значимых в текущем контексте».

Это может означать визуально, так как цвет и цвет фона в атрибутивной строке совпадают. Эффективно пусто.

Это может означать пустые значащие символы. Все точки или все тире или все подчеркивания могут считаться пустыми. Кроме того, пустой из значимых значащих символов может означать строку, в которой нет символов, понятных читателю. Это могут быть символы языка или набора символов, определенные для читателя как бессмысленные. Мы могли бы определить это немного по-другому, говоря, что строка не содержит известных слов в данном языке.

Мы могли бы сказать, что empty является функцией процента отрицательного пространства в визуализированных глифах.

Даже последовательность непечатаемых символов без общего визуального представления не является действительно пустой. Управляющие персонажи приходят на ум. Особенно низкий диапазон ASCII (я удивлен, что никто не упомянул о них, поскольку они содержат много систем и не являются пробелами, поскольку обычно у них нет глифов и визуальных метрик). И все же длина строки не равна нулю.

Заключение. Только длина не единственная мера здесь. Контекстное членство в наборе также очень важно.

Членство в наборе символов является очень важной общей дополнительной мерой. Значимые последовательности также довольно распространены. (думаю, SETI или крипто или каптчи) Также существуют дополнительные более абстрактные контекстные наборы.

Поэтому тщательно подумайте, прежде чем предполагать, что строка пуста только в зависимости от длины или пробела.

2 голосов
/ 10 июля 2015
- (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;
}
2 голосов
/ 24 ноября 2015

Лучший способ - использовать категорию.
Вы можете проверить следующую функцию. У которого есть все условия для проверки.

-(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;
    }
1 голос
/ 02 января 2017
//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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...