Как проверить, является ли строка пустой в Objective C?

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

вопрос задан 22.05.2009
Jamey McElveen
8646 репутация

30 ответов


  • 1095 рейтинг

    Вы можете проверить, если [string length] == 0. Это проверит, является ли это допустимой, но пустой строкой (@ ""), а также нулем, так как вызов length для nil также вернет 0.

    ответ дан Marc Charbonneau, с репутацией 38460, 22.05.2009
  • 126 рейтинг

    Марк ответ правильный. Но я воспользуюсь этой возможностью, чтобы включить указатель на обобщенный isEmpty Уила Шипли, которым он поделился в своем блоге :

    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);
    }
    
    ответ дан Matt G, с репутацией 2285, 22.05.2009
  • 93 рейтинг

    Первый подход действителен, но не работает, если в вашей строке есть пробелы (@" "). Поэтому вы должны очистить эти пробелы перед тестированием.

    Этот код очищает все пробелы с обеих сторон строки:

    [stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
    

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

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

    Теперь вы можете использовать:

    NSString *emptyString = @"   ";
    
    if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
    
    ответ дан SEQOY Development Team, с репутацией 1473, 27.10.2009
  • 30 рейтинг

    Одно из лучших решений, которое я когда-либо видел (лучше, чем у Мэтта Дж), - это улучшенная встроенная функция, которую я использовал в репозитории Git Hub (Уил Шипли, но я не могу найти ссылку):

    // 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);
    }
    
    ответ дан Rob, с репутацией 1678, 9.09.2010
  • 15 рейтинг

    Вам лучше использовать эту категорию:

    @implementation NSString (Empty)
    
        - (BOOL) isWhitespace{
            return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
        }
    
    @end
    
    ответ дан does_not_exist, с репутацией , 26.12.2009
  • 12 рейтинг

    Просто передайте свою строку следующему методу:

    +(BOOL)isEmpty:(NSString *)str
    {
        if(str.length==0 || [str isKindOfClass:[NSNull class]] || [str isEqualToString:@""]||[str  isEqualToString:NULL]||[str isEqualToString:@"(null)"]||str==nil || [str isEqualToString:@""]){
            return YES;
        }
        return NO;
    }
    
    ответ дан Mani Vannan, с репутацией 167, 3.02.2014
  • 11 рейтинг

    Я положил это:

    @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
    

    Проблема в том, что если self равно nil, эта функция никогда не вызывается. Он вернет ложь, что желательно.

    ответ дан J. Chang, с репутацией 13850, 2.06.2011
  • 9 рейтинг

    Другой вариант - проверить, равно ли оно @"" с isEqualToString:, например:

    if ([myString isEqualToString:@""]) {
        NSLog(@"myString IS empty!");
    } else {
        NSLog(@"myString IS NOT empty, it is: %@", myString);
    }
    
    ответ дан chown, с репутацией 40482, 27.11.2011
  • 5 рейтинг

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

    +(BOOL)isStringEmpty:(NSString *)str
        {
            if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
                return YES;
           }
            return NO;
        }
    
    ответ дан iDevAmit, с репутацией 746, 1.07.2014
  • 5 рейтинг

    Swift Version

    Несмотря на то, что это вопрос по Objective C, мне нужно было использовать NSString в Swift, поэтому я также включу ответ здесь.

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

    Или, если NSString является необязательным:

    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.")
        }
    }
    

    Обычная версия Swift String -

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

    См. Также: Проверить пустую строку в Swift?

    ответ дан Suragch, с репутацией 180669, 9.07.2015
  • 5 рейтинг

    Просто используйте одно из условий if else, как показано ниже:

    Способ 1:

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

    Способ 2:

    if ([yourString length] == 0) {
        // Empty yourString
    } else {
        // yourString is not empty
    }
    
    ответ дан Samir Jwarchan, с репутацией 957, 1.08.2012
  • 4 рейтинг

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

    +(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 и рекламировал этот метод, чтобы вы могли использовать этот метод, просто вызывая его через свое приложение.

    ответ дан Fatima Arshad, с репутацией 325, 24.09.2014
  • 4 рейтинг

    У вас есть 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
    }
    

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

    ответ дан Aditya, с репутацией 60, 17.11.2014
  • 3 рейтинг

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

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

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

    Удачного кодирования. , ,

    ответ дан Aks, с репутацией 2542, 27.05.2016
  • 3 рейтинг

    Очень полезный пост, чтобы добавить поддержку 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);
    }
    
    ответ дан Zeev Vax, с репутацией 656, 15.09.2012
  • 2 рейтинг
    - (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;
    }
    
    ответ дан Ptbaileys, с репутацией 41, 9.07.2015
  • 2 рейтинг

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

    Если NSString - s

    if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {
    
        NSLog(@"s is empty");
    
    } else {
    
        NSLog(@"s containing %@", s);
    
    }
    
    ответ дан Salim, с репутацией 10399, 30.09.2013
  • 2 рейтинг

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

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

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

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

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

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

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

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

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

    ответ дан uchuugaka, с репутацией 10847, 25.03.2014
  • 2 рейтинг

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

    -(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;
        }
    
    ответ дан Tarun, с репутацией 92, 24.11.2015
  • 1 рейтинг

    Вы можете легко проверить, если строка пуста с этим:

    if ([yourstring isEqualToString:@""]) {
        // execute your action here if string is empty
    }
    
    ответ дан user3213914, с репутацией 36, 14.04.2014
  • 1 рейтинг

    Это так же просто, как if([myString isEqual:@""]) или if([myString isEqualToString:@""])

    ответ дан Ahsan Ebrahim, с репутацией 927, 30.03.2015
  • 1 рейтинг
    if (string.length == 0) stringIsEmpty;
    
    ответ дан Harish Nagisetty, с репутацией 154, 4.10.2013
  • 1 рейтинг

    Я проверил пустую строку, используя следующий код:

    //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"];  
    }
    
    ответ дан Jayprakash Dubey, с репутацией 22716, 30.09.2014
  • 1 рейтинг

    проверить это:

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

    или

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

    Надеюсь, это поможет.

    ответ дан Mayur, с репутацией 3477, 25.03.2014
  • 1 рейтинг

    Лучший способ в любом случае - проверить длину заданной строки. Для этого, если ваша строка myString, код:

        int len = [myString length];
        if(len == 0){
           NSLog(@"String is empty");
        }
        else{
          NSLog(@"String is : %@", myString);
        }
    
    ответ дан AJS, с репутацией 1240, 27.06.2012
  • 1 рейтинг
    //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;
    }
    
    ответ дан Rohit Kashyap, с репутацией 636, 2.01.2017
  • 0 рейтинг
    if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
        NSLog(@"String is empty");
    }
    else{
        NSLog(@"String is not empty");
    }    
    
    ответ дан C_compnay, с репутацией 115, 18.09.2014
  • 0 рейтинг

    Попробуйте следующее

    NSString *stringToCheck = @"";
    
    if ([stringToCheck isEqualToString:@""])
    {
       NSLog(@"String Empty");
    }
    else
    {
       NSLog(@"String Not Empty");
    }
    
    ответ дан Rich Allen, с репутацией 16, 20.09.2018
  • 0 рейтинг

    Вы можете получить пустую строку двумя способами:

    1) @ "" // Не содержит пробела

    2) @ "" // Содержит пространство

    Технически обе строки пусты. Мы можем написать обе вещи, просто используя ONE Условие

    if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
    {
        NSLog(@"Empty String");
    }
    else
    {
        NSLog(@"String contains some value");
    }
    
    ответ дан Chetan Rajauria, с репутацией 169, 2.02.2018
  • -1 рейтинг
    if( [txtMobile.text length] == 0 )
    {
        [Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
    }
    
    ответ дан Mohsin Sabasara, с репутацией 368, 24.10.2013