ฉันจะทดสอบได้อย่างไรว่าวัตถุNSStringนั้นว่างเปล่าใน Objective-C
ฉันจะทดสอบได้อย่างไรว่าวัตถุNSStringนั้นว่างเปล่าใน Objective-C
คำตอบ:
[string length] == 0คุณสามารถตรวจสอบว่า การดำเนินการนี้จะตรวจสอบว่าเป็นสตริงที่ถูกต้อง แต่ว่างเปล่า (@ "") รวมทั้งเป็นศูนย์หรือไม่เนื่องจากการเรียกlengthใช้ศูนย์จะส่งคืนค่า 0 ด้วย
ZERO WIDTH SPACEไม่สำคัญเพราะ@"\u200B" เป็นตัวละครอย่างไรก็ตามถ้าคุณทดสอบสายว่างเปล่ามันจะบอกว่ามันไม่ได้เพราะมีตัวละครอยู่ในนั้น มันไม่สามารถพิมพ์ได้ตามมาตรฐาน Unicode
                    ![string length]ส่วนและเพิ่มการปฏิเสธในด้านหน้า: ดูเหมือนจะสะอาดขึ้น
                    คำตอบของ Marc ถูกต้อง แต่ฉันจะใช้โอกาสนี้เพื่อรวมตัวชี้ไปที่ภาพรวมทั่วไปของ Wil Shipley 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);
}-isNotEmpty:)
                    วิธีแรกใช้ได้ แต่ไม่ทำงานหากสตริงของคุณมีช่องว่าง ( @"          ") ดังนั้นคุณต้องล้างช่องว่างสีขาวนี้ก่อนทดสอบ
รหัสนี้ล้างช่องว่างทั้งหมดทั้งสองด้านของสตริง:
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];แนวคิดหนึ่งที่ดีคือสร้างมาโครหนึ่งตัวดังนั้นคุณไม่จำเป็นต้องพิมพ์บรรทัดมอนสเตอร์นี้:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]ตอนนี้คุณสามารถใช้:
NSString *emptyString = @"   ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");NSStringหมวดหมู่ที่เพิ่มวิธีการที่เรียกtrimmedStringว่าทำสิ่งที่คุณเขียน
                    whitespaceCharacterSetไม่ได้ขึ้นบรรทัดใหม่! นี่คือหมวดหมู่ที่ฉันเขียนรวมถึงtrimและวิธีการที่มีประโยชน์อื่น ๆ : github.com/alexch/unsuck/blob/master/unsuck/NSString%2BUnsuck.m  github.com/alexch/unsuck/blob/master/unsuckTests/…
                    หนึ่งในทางออกที่ดีที่สุดที่ฉันเคยเห็น (ดีกว่าของ Matt G) คือฟังก์ชั่นอินไลน์ที่ได้รับการปรับปรุงที่ฉันเลือกใช้ใน repo ของ Git Hub (หนึ่งใน Wil Shipley แต่ฉันหาลิงก์ไม่เจอ):
// Check if the "thing" passed 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);
}condenseToSingleNSData(id thing)? expandToNSArray(id thing)? ไม่ช้าก็เร็วคุณจะถามว่าคุณเรียนกับคลาสไหนดีกว่าที่จะทำในการอ้างอิงครั้งแรก 
                    คุณควรใช้หมวดหมู่นี้ดีกว่า:
@implementation NSString (Empty)
    - (BOOL) isWhitespace{
        return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
    }
@end@implementation NSString (Empty)  - (BOOL) empty{     return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]length] == 0); }  @end  เป็นการผสมผสานระหว่างคำตอบของ Marc และ Kyle
                    ฉันใส่สิ่งนี้:
@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ปัญหาคือว่าถ้าตัวเองเป็นศูนย์ฟังก์ชั่นนี้จะไม่ถูกเรียก มันจะคืนค่าเท็จซึ่งเป็นที่ต้องการ
-(BOOL)isEmpty{ return ![self isNotEmpty]}จะไม่ทำงานในหมวดหมู่
                    condenseToSingleNSData(id thing)? expandToNSArray(id thing)? ไม่ช้าก็เร็วคุณจะถามว่าคุณเรียนกับคลาสไหนดีกว่าที่จะทำในการอ้างอิงครั้งแรก 
                    อีกทางเลือกหนึ่งคือการตรวจสอบว่ามันเท่ากับ@""ด้วยisEqualToString:เช่น:
if ([myString isEqualToString:@""]) {
    NSLog(@"myString IS empty!");
} else {
    NSLog(@"myString IS NOT empty, it is: %@", myString);
}เพียงแค่ส่งสตริงของคุณไปที่วิธีการดังต่อไปนี้:
+(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;
}เพียงใช้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
}แม้ว่านี่จะเป็นคำถามเกี่ยวกับวัตถุประสงค์ 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.")
    }
}Stringรุ่นSwift ปกติคือ
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;
}วิธีปฏิบัติที่ดีที่สุดคือการสร้างคลาสที่ใช้ร่วมกันบอกว่า UtilityClass และโฆษณาวิธีนี้เพื่อให้คุณสามารถใช้วิธีนี้ได้โดยเพียงแค่เรียกมันผ่านแอปพลิเคชันของคุณ
คุณมี 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
}เลือกวิธีใดวิธีหนึ่งข้างต้นและรับรู้ว่าสตริงว่างเปล่าหรือไม่
เพียงตรวจสอบความยาวสตริงของคุณ
 if (!yourString.length)
 {
   //your code  
 }ข้อความถึง NIL จะส่งคืนค่าศูนย์หรือ 0 ดังนั้นไม่จำเป็นต้องทดสอบค่าศูนย์ใด ๆ :)
แฮปปี้รหัส ...
มันใช้งานได้เป็นเสน่ห์สำหรับฉัน
ถ้าNSStringเป็นs
if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {
    NSLog(@"s is empty");
} else {
    NSLog(@"s containing %@", s);
}ดังนั้นนอกเหนือจากแนวคิดพื้นฐานของการตรวจสอบความยาวสตริงน้อยกว่า 1 มันเป็นสิ่งสำคัญที่จะต้องพิจารณาบริบทอย่างลึกซึ้ง ภาษามนุษย์หรือคอมพิวเตอร์หรืออาจมีคำจำกัดความที่แตกต่างกันของสตริงว่างและภายในภาษาเดียวกันบริบทเพิ่มเติมอาจเปลี่ยนความหมายเพิ่มเติม
สมมติว่าสตริงว่างหมายถึง "สตริงที่ไม่มีอักขระใด ๆ ที่สำคัญในบริบทปัจจุบัน"
นี่อาจหมายถึงการมองเห็นเนื่องจากสีและสีพื้นหลังจะเหมือนกันในสตริงที่ประกอบ ว่างเปล่าอย่างมีประสิทธิภาพ
นี่อาจหมายถึงไม่มีอักขระที่มีความหมาย จุดทั้งหมดหรือขีดกลางทั้งหมดหรือขีดล่างทั้งหมดอาจถือว่าว่างเปล่า นอกจากนี้ตัวอักษรที่มีความหมายที่ว่างเปล่าอาจหมายถึงสตริงที่ไม่มีตัวอักษรที่ผู้อ่านเข้าใจ พวกเขาอาจเป็นตัวอักษรในภาษาหรือชุดอักขระที่กำหนดว่าไม่มีความหมายต่อผู้อ่าน เราสามารถนิยามให้แตกต่างกันเล็กน้อยเพื่อบอกว่าสตริงไม่มีคำที่รู้จักในภาษาที่กำหนด
เราสามารถบอกว่าว่างเปล่าเป็นฟังก์ชันของอัตราร้อยละของพื้นที่เชิงลบในการแสดงร่ายมนตร์
แม้แต่ลำดับของอักขระที่ไม่สามารถพิมพ์ได้โดยไม่มีการแสดงภาพทั่วไปก็ไม่ได้ว่างเปล่าอย่างแท้จริง ตัวควบคุมอยู่ในใจ โดยเฉพาะอย่างยิ่งช่วง ASCII ต่ำ (ฉันประหลาดใจที่ไม่มีใครพูดถึงพวกเขาเนื่องจากพวกมันมีระบบจำนวนมากและไม่ได้เป็นช่องว่างเพราะปกติแล้วพวกเขาไม่มี glyphs และไม่มีมาตรวัดด้วยภาพ) แต่ความยาวสตริงไม่เป็นศูนย์
ข้อสรุป ความยาวเพียงอย่างเดียวไม่ได้วัดที่นี่เท่านั้น การเป็นสมาชิกของชุดบริบทก็สำคัญเช่นกัน
การเป็นสมาชิกชุดอักขระเป็นมาตรการเพิ่มเติมทั่วไปที่สำคัญมาก ลำดับที่มีความหมายก็เป็นสิ่งที่พบได้ทั่วไปเช่นกัน (คิดว่า SETI หรือ crypto หรือ captchas) ยังมีชุดบริบทเพิ่มเติมที่เป็นนามธรรมเพิ่มเติม
ดังนั้นคิดอย่างรอบคอบก่อนที่จะสมมติว่าสตริงว่างเปล่าตามความยาวหรือช่องว่างเท่านั้น
โพสต์ที่มีประโยชน์มากในการเพิ่มการสนับสนุน 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);
}condenseToSingleNSData(id thing)? expandToNSArray(id thing)? ไม่ช้าก็เร็วคุณจะถามว่าคุณเรียนกับคลาสไหนดีกว่าที่จะทำในการอ้างอิงครั้งแรก 
                    - (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;
}stringByStrippingWhitespace
                    วิธีที่ดีที่สุดคือใช้หมวดหมู่ 
คุณสามารถตรวจสอบฟังก์ชั่นต่อไปนี้ ซึ่งมีเงื่อนไขทั้งหมดให้ตรวจสอบ
-(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;
}คุณสามารถมีสตริงว่างได้สองวิธี:
1) @ "" // ไม่มีที่ว่าง
2) @ "" // มีที่ว่าง
ในทางเทคนิคสตริงทั้งสองนั้นว่างเปล่า เราสามารถเขียนสิ่งที่ทั้งสองโดยใช้เพียงแค่ONEสภาพ
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(str.length == 0 || [str isKindOfClass: [NSNull class]]){
    NSLog(@"String is empty");
}
else{
    NSLog(@"String is not empty");
}    str.lengthจะโยนข้อยกเว้นถ้าstrเป็นโมฆะ
                    if( [txtMobile.text length] == 0 )
{
    [Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}
@"\u200B"(ประกอบด้วยอักขระ Unicode เท่านั้นZERO WIDTH SPACE การพิมพ์ออกมาจะพิมพ์ 0 ตัวอักษร (ตรวจสอบโดยใช้แบบอักษร monospaced) แต่ string.length จะให้ 1 มีอักขระ Unicode อื่น ๆ (เช่นOBJECT REPLACEMENT CHARACTER ) ซึ่งอาจทำงานเหมือนกัน ได้รับหลังเมื่อแยกวิเคราะห์ข้อความ PDF #