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

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

30 ответов


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


ответ Марка правильный. Но я воспользуюсь этой возможностью, чтобы включить указатель на обобщенный 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);
}

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

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

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

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

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

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

NSString *emptyString = @"   ";

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

одним из лучших решений, которые я когда-либо видел (лучше, чем Matt G), является эта улучшенная встроенная функция, которую я взял на некотором репозитории Git Hub (Wil Shipley, но я не могу найти ссылку) :

// 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);
}

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

@implementation NSString (Empty)

    - (BOOL) isWhitespace{
        return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
    }

@end

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

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

Я поставил этот:

@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 равен нулю, эта функция никогда не вызывается. Он вернет false, что желательно.


другой вариант-проверить, равен ли он @"" С isEqualToString: вот так:

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

просто использовать 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
}

Swift Версия

хотя это объективный вопрос 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?


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

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

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

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

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


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

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


очень полезный пост, чтобы добавить поддержку 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);
}

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

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

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

удачи в кодировании ...


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

Если NSString is s

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

    NSLog(@"s is empty");

} else {

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

}

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

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

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

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

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

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

вывод. Длина сама по себе здесь не единственная мера. Контекстное членство в наборе также очень важно.

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

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


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

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

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

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

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

if (string.length == 0) stringIsEmpty;

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

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

или

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

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


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

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

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

//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"];  
}

его так же просто, как if([myString isEqual:@""]) или 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");
}    

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

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

2) @" " // Содержать Пробел

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

if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
    NSLog(@"Empty String");
}
else
{
    NSLog(@"String contains some value");
}

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

NSString *stringToCheck = @"";

if ([stringToCheck isEqualToString:@""])
{
   NSLog(@"String Empty");
}
else
{
   NSLog(@"String Not Empty");
}

if( [txtMobile.text length] == 0 )
{
    [Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}