ฉันจะทดสอบว่าสตริงว่างใน Objective-C ได้อย่างไร?


คำตอบ:


1156

[string length] == 0คุณสามารถตรวจสอบว่า การดำเนินการนี้จะตรวจสอบว่าเป็นสตริงที่ถูกต้อง แต่ว่างเปล่า (@ "") รวมทั้งเป็นศูนย์หรือไม่เนื่องจากการเรียกlengthใช้ศูนย์จะส่งคืนค่า 0 ด้วย


12
มี NSStrings ที่หายากมาก ๆ ซึ่งสิ่งนี้จะส่งผลให้เกิดการลบที่ผิดพลาด (การพูดว่าสตริงไม่ว่างเปล่าเมื่อเพื่อวัตถุประสงค์ในทางปฏิบัติคือ) พิจารณา@"\u200B"(ประกอบด้วยอักขระ Unicode เท่านั้นZERO WIDTH SPACE การพิมพ์ออกมาจะพิมพ์ 0 ตัวอักษร (ตรวจสอบโดยใช้แบบอักษร monospaced) แต่ string.length จะให้ 1 มีอักขระ Unicode อื่น ๆ (เช่นOBJECT REPLACEMENT CHARACTER ) ซึ่งอาจทำงานเหมือนกัน ได้รับหลังเมื่อแยกวิเคราะห์ข้อความ PDF #
4322 fzwo

43
@fzwo ไม่ควรเป็นคนโง่ แต่ในทางทฤษฎีแล้วมันไม่ได้ให้ความรู้สึกผิด ๆ มันทำงานตรงตามที่คุณคาดหวัง การตีความของคุณในสิ่งที่ZERO WIDTH SPACEไม่สำคัญเพราะ@"\u200B" เป็นตัวละครอย่างไรก็ตามถ้าคุณทดสอบสายว่างเปล่ามันจะบอกว่ามันไม่ได้เพราะมีตัวละครอยู่ในนั้น มันไม่สามารถพิมพ์ได้ตามมาตรฐาน Unicode
bmeulmeester

2
แน่นอนว่ามันถูกต้องทางเทคนิคฉันไม่ได้โต้วาที ฉันแค่ต้องการเตือนว่านี่อาจไม่แสดงพฤติกรรมที่ตั้งใจหรือคาดหวังซึ่งเป็นสาเหตุที่ฉันเขียน "เพื่อการปฏิบัติ" ขึ้นอยู่กับความหมายที่ตั้งใจไว้ "ว่างเปล่า"
fzwo

4
มันไม่ได้เป็นเชิงลบที่ผิดพลาด "zero zero space" เป็นอักขระยูนิโค้ดเหมือนอย่างอื่น เป็นเพียง "ความทรงจำที่คุ้มค่า" หากเกี่ยวข้องกับแอปของคุณ (ความคิดที่ดี, fzwo!)
Fattie

2
ให้ฉันรู้ว่าฉันผิด แต่ฉันคิดว่าคุณยังสามารถงด == 0 ![string length]ส่วนและเพิ่มการปฏิเสธในด้านหน้า: ดูเหมือนจะสะอาดขึ้น
damirstuhec

126

คำตอบของ 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);
}

26
หากคุณต้องการให้เรื่องนี้เป็นเรื่องธรรมดามากใครสามารถใช้ตรรกะนี้เป็นหมวดหมู่ใน NSObject แทนที่จะใช้วิธีคงที่ดังที่แสดงที่นี่
แบรด The App Guy

16
น่าแปลกที่นี่ไม่ได้ตรวจสอบ [NSNull null]
Peter N Lewis

14
หากคุณอยู่ในสถานการณ์ที่คุณไม่ทราบว่าคุณกำลังตรวจสอบวัตถุประเภทใดฉันคิดว่านี่เป็นผลงาน อย่างไรก็ตามฉันขอแนะนำว่าถ้าคุณไม่รู้ว่าวัตถุนั้นเป็น NSData หรือ NSArray คุณมีปัญหาที่ใหญ่กว่า แมโครถัดไปของคุณจะเป็นอย่างไรหลังจากการโทรนี้ condenseToSingleNSData (สิ่ง id) expandToNSArray (สิ่ง id)? ไม่ช้าก็เร็วคุณจะถามว่าคุณเรียนกับคลาสไหนดีกว่าที่จะทำในการอ้างอิงครั้งแรก
Brane

1
@BradSmith เราสามารถสร้างหมวดหมู่ได้ แต่จะไม่มีการนับค่าใด ๆ เนื่องจากจะไม่มีการเรียกใช้เมธอด ตัวอย่างเช่นถ้า thing = nil [things IsEmpty] จะไม่ถูกเรียกใช้และจะส่งคืนค่า false / NO ในการตรวจสอบศูนย์จะต้องมีพารามิเตอร์ วัตถุ Nil ไม่สามารถเปรียบเทียบตัวเองเป็นศูนย์ผ่านหมวดหมู่
คริส

3
@chris จากนั้นคุณสามารถเปลี่ยนวิธีหมวดหมู่เป็น-isNotEmpty:)
nielsbot

93

วิธีแรกใช้ได้ แต่ไม่ทำงานหากสตริงของคุณมีช่องว่าง ( @" ") ดังนั้นคุณต้องล้างช่องว่างสีขาวนี้ก่อนทดสอบ

รหัสนี้ล้างช่องว่างทั้งหมดทั้งสองด้านของสตริง:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

แนวคิดหนึ่งที่ดีคือสร้างมาโครหนึ่งตัวดังนั้นคุณไม่จำเป็นต้องพิมพ์บรรทัดมอนสเตอร์นี้:

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

ตอนนี้คุณสามารถใช้:

NSString *emptyString = @"   ";

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

3
ทำไมต้องใช้มาโครเมื่อไม่จำเป็น? ในกรณีนี้ความปลอดภัยประเภทใด ๆ ที่เสียสละเพื่อประโยชน์ที่แท้จริงไม่
EM

เพื่อความสะดวกหากคุณต้องการเขียน "[object stringObject stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]" ทุกครั้งที่คุณต้องการตรวจสอบว่ามีสตริงหนึ่งว่างหรือไม่นั้นขึ้นอยู่กับคุณ
ทีมพัฒนา SEQOY

18
ที่ดีกว่าจะได้รับบริการตามNSStringหมวดหมู่ที่เพิ่มวิธีการที่เรียกtrimmedStringว่าทำสิ่งที่คุณเขียน
เดฟเดอลอง

2
โปรดทราบว่าแอปเปิ้ลwhitespaceCharacterSetไม่ได้ขึ้นบรรทัดใหม่! นี่คือหมวดหมู่ที่ฉันเขียนรวมถึงtrimและวิธีการที่มีประโยชน์อื่น ๆ : github.com/alexch/unsuck/blob/master/unsuck/NSString%2BUnsuck.m github.com/alexch/unsuck/blob/master/unsuckTests/…
AlexChaffee

@EM ฉันไม่ใช่แฟนของมาโคร แต่ฉันไม่เข้าใจข้อกังวลด้านความปลอดภัยของคุณ ในระหว่างการรวบรวมแมโครจะถูกแทนที่ด้วยเนื้อหาดังนั้นถ้าคุณเรียกใช้แมโครด้วยสิ่งที่แตกต่างจาก NSString คุณยังคงได้รับข้อความจากคอมไพเลอร์ หมวดหมู่จะดีกว่าอยู่ดี
Zmaster

32

หนึ่งในทางออกที่ดีที่สุดที่ฉันเคยเห็น (ดีกว่าของ 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);
}

2
นี่คืองานของ Wil Shipley FYI คุณสามารถเปลี่ยน [สิ่ง isKindOfClass: [คลาส NSNull]] เป็นเพียงแค่ (สิ่ง == [NSNull null])
Steve N

ว้าว .... สิ่งที่ฉันกำลังมองหา ฉันเป็นบ้าพยายามที่จะคิดออกว่าทำไมฟังก์ชั่น "cellForRowAtIndexPath" ของฉันจึงล้มเหลวเนื่องจากสตริงว่าง (และฉันไม่สามารถจับปัญหาได้) ฟังก์ชั่นนี้แก้ไขได้อย่างสมบูรณ์แบบ
Mike Gledhill

คัดลอกความคิดเห็น @Brane: หากคุณอยู่ในสถานการณ์ที่คุณไม่ทราบว่าคุณกำลังตรวจสอบวัตถุประเภทใดฉันคิดว่าสิ่งนี้ใช้ได้ผล อย่างไรก็ตามฉันขอแนะนำว่าถ้าคุณไม่รู้ว่าวัตถุนั้นเป็น NSData หรือ NSArray คุณมีปัญหาที่ใหญ่กว่า อะไรแมโครต่อไปของคุณไปได้หลังจากที่โทรนี้condenseToSingleNSData(id thing)? expandToNSArray(id thing)? ไม่ช้าก็เร็วคุณจะถามว่าคุณเรียนกับคลาสไหนดีกว่าที่จะทำในการอ้างอิงครั้งแรก
Cœur

16

คุณควรใช้หมวดหมู่นี้ดีกว่า:

@implementation NSString (Empty)

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

@end

6
คำจำกัดความนั้นจะสรุปว่าสตริง "/ r / n / r / n" นั้นว่างเปล่าเมื่อมันไม่ชัดเจน - มันมีช่องว่าง หน้าที่ของคุณคือ: - (BOOL) isWhitespace (NSString *);
JBRWilkinson

6
ข้อพิสูจน์นี้ ฉันใช้หมวดหมู่นี้และมีการบิด หากคุณเรียกใช้สิ่งนี้บนสตริงศูนย์ฟังก์ชันนี้จะไม่ถูกเรียกใช้และคุณจะได้รับ NO (หรือสิ่งที่ประเมินเป็น NO) เป็นค่าส่งคืน ถ้าอย่างนั้นคุณคิดว่ามันไม่ว่างเปล่า ... มันอาจใช้ได้ถ้าชื่อนั้นเต็มไปหรืออะไรทำนองนั้น
Ying

ฉันเดาว่าหมวดหมู่ที่ถูกต้องน่าจะเป็น: @implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]length] == 0); } @end เป็นการผสมผสานระหว่างคำตอบของ Marc และ Kyle
palme

12

ฉันใส่สิ่งนี้:

@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

ปัญหาคือว่าถ้าตัวเองเป็นศูนย์ฟังก์ชั่นนี้จะไม่ถูกเรียก มันจะคืนค่าเท็จซึ่งเป็นที่ต้องการ


ทางออกที่ดีที่สุดเนื่องจากก) เป็นวิธีการแบบอินสแตนซ์และข) หมวดหมู่ c) กรณีที่ไม่มีตัวเองถูกจัดการโดย 'isNotEmpty' ขอบคุณ!
เดนิส

ความคิดที่ดีเลวร้ายเกินไป-(BOOL)isEmpty{ return ![self isNotEmpty]}จะไม่ทำงานในหมวดหมู่
Alston

คัดลอกความคิดเห็น @Brane: หากคุณอยู่ในสถานการณ์ที่คุณไม่ทราบว่าคุณกำลังตรวจสอบวัตถุประเภทใดฉันคิดว่าสิ่งนี้ใช้ได้ผล อย่างไรก็ตามฉันขอแนะนำว่าถ้าคุณไม่รู้ว่าวัตถุนั้นเป็น NSData หรือ NSArray คุณมีปัญหาที่ใหญ่กว่า อะไรแมโครต่อไปของคุณไปได้หลังจากที่โทรนี้condenseToSingleNSData(id thing)? expandToNSArray(id thing)? ไม่ช้าก็เร็วคุณจะถามว่าคุณเรียนกับคลาสไหนดีกว่าที่จะทำในการอ้างอิงครั้งแรก
Cœur

11

อีกทางเลือกหนึ่งคือการตรวจสอบว่ามันเท่ากับ@""ด้วยisEqualToString:เช่น:

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

11

เพียงแค่ส่งสตริงของคุณไปที่วิธีการดังต่อไปนี้:

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

ดูความคิดเห็นเกี่ยวกับstackoverflow.com/questions/21605075/…เพื่อดูว่าทำไมสิ่งนี้ถึงผิด ด้วยวิธีนี้จะดีกว่าแล้วคำตอบอื่น ๆ ที่นี่
Popeye

6

เพียงใช้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
}

6

เวอร์ชั่นของ 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.")
    }
}

Stringรุ่นSwift ปกติคือ

let myString: String = ""

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

ดูเพิ่มเติม: ตรวจสอบสตริงว่างใน Swift หรือไม่


5

อาจเป็นคำตอบนี้ซ้ำกับคำตอบที่ได้รับไปแล้ว แต่ฉันได้ทำการดัดแปลงและเปลี่ยนแปลงตามลำดับของการตรวจสอบเงื่อนไข โปรดอ้างอิงรหัสด้านล่าง:

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

นี่คือหมวดที่คุณสามารถดูวิธีการสร้างมันขึ้นมาที่นี่: goo.gl/bRcfn7 ฉันชอบความคิดของหมวดหมู่นี้
Daniel Gomez Rico

ไม่เราไม่สามารถพูดได้ว่านี่เป็นหมวดหมู่ หากฟังก์ชั่นนี้มีการใช้งานภายใต้หมวดหมู่ของ NSString ระดับแล้วมันเป็นหมวดหมู่ มิฉะนั้นเราสามารถเรียกวิธีนี้พร้อมชื่อชั้นเรียนไม่ว่าเราจะใช้งานที่ไหน Like Bool isEmptyStr = [MyClassName isStringEmpty: str] แต่ก็ยังดีกว่าถ้าเราจะประกาศภายใต้หมวดหมู่ เพราะอย่างใดเราจำเป็นต้องใช้ประโยชน์จากหมวดหมู่ด้วย
iDevAmit

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 และโฆษณาวิธีนี้เพื่อให้คุณสามารถใช้วิธีนี้ได้โดยเพียงแค่เรียกมันผ่านแอปพลิเคชันของคุณ


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
}

เลือกวิธีใดวิธีหนึ่งข้างต้นและรับรู้ว่าสตริงว่างเปล่าหรือไม่


3

เพียงตรวจสอบความยาวสตริงของคุณ

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

ข้อความถึง NIL จะส่งคืนค่าศูนย์หรือ 0 ดังนั้นไม่จำเป็นต้องทดสอบค่าศูนย์ใด ๆ :)

แฮปปี้รหัส ...


ฉันใช้มันมาหลายครั้งแล้ว ไม่จำเป็นต้องมีส่วนขยายหมวดหมู่และสิ่งใด
pnizzle

2

มันใช้งานได้เป็นเสน่ห์สำหรับฉัน

ถ้าNSStringเป็นs

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

    NSLog(@"s is empty");

} else {

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

}

2

ดังนั้นนอกเหนือจากแนวคิดพื้นฐานของการตรวจสอบความยาวสตริงน้อยกว่า 1 มันเป็นสิ่งสำคัญที่จะต้องพิจารณาบริบทอย่างลึกซึ้ง ภาษามนุษย์หรือคอมพิวเตอร์หรืออาจมีคำจำกัดความที่แตกต่างกันของสตริงว่างและภายในภาษาเดียวกันบริบทเพิ่มเติมอาจเปลี่ยนความหมายเพิ่มเติม

สมมติว่าสตริงว่างหมายถึง "สตริงที่ไม่มีอักขระใด ๆ ที่สำคัญในบริบทปัจจุบัน"

นี่อาจหมายถึงการมองเห็นเนื่องจากสีและสีพื้นหลังจะเหมือนกันในสตริงที่ประกอบ ว่างเปล่าอย่างมีประสิทธิภาพ

นี่อาจหมายถึงไม่มีอักขระที่มีความหมาย จุดทั้งหมดหรือขีดกลางทั้งหมดหรือขีดล่างทั้งหมดอาจถือว่าว่างเปล่า นอกจากนี้ตัวอักษรที่มีความหมายที่ว่างเปล่าอาจหมายถึงสตริงที่ไม่มีตัวอักษรที่ผู้อ่านเข้าใจ พวกเขาอาจเป็นตัวอักษรในภาษาหรือชุดอักขระที่กำหนดว่าไม่มีความหมายต่อผู้อ่าน เราสามารถนิยามให้แตกต่างกันเล็กน้อยเพื่อบอกว่าสตริงไม่มีคำที่รู้จักในภาษาที่กำหนด

เราสามารถบอกว่าว่างเปล่าเป็นฟังก์ชันของอัตราร้อยละของพื้นที่เชิงลบในการแสดงร่ายมนตร์

แม้แต่ลำดับของอักขระที่ไม่สามารถพิมพ์ได้โดยไม่มีการแสดงภาพทั่วไปก็ไม่ได้ว่างเปล่าอย่างแท้จริง ตัวควบคุมอยู่ในใจ โดยเฉพาะอย่างยิ่งช่วง ASCII ต่ำ (ฉันประหลาดใจที่ไม่มีใครพูดถึงพวกเขาเนื่องจากพวกมันมีระบบจำนวนมากและไม่ได้เป็นช่องว่างเพราะปกติแล้วพวกเขาไม่มี glyphs และไม่มีมาตรวัดด้วยภาพ) แต่ความยาวสตริงไม่เป็นศูนย์

ข้อสรุป ความยาวเพียงอย่างเดียวไม่ได้วัดที่นี่เท่านั้น การเป็นสมาชิกของชุดบริบทก็สำคัญเช่นกัน

การเป็นสมาชิกชุดอักขระเป็นมาตรการเพิ่มเติมทั่วไปที่สำคัญมาก ลำดับที่มีความหมายก็เป็นสิ่งที่พบได้ทั่วไปเช่นกัน (คิดว่า SETI หรือ crypto หรือ captchas) ยังมีชุดบริบทเพิ่มเติมที่เป็นนามธรรมเพิ่มเติม

ดังนั้นคิดอย่างรอบคอบก่อนที่จะสมมติว่าสตริงว่างเปล่าตามความยาวหรือช่องว่างเท่านั้น


2

โพสต์ที่มีประโยชน์มากในการเพิ่มการสนับสนุน 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);
}

คัดลอกความคิดเห็น @Brane: หากคุณอยู่ในสถานการณ์ที่คุณไม่ทราบว่าคุณกำลังตรวจสอบวัตถุประเภทใดฉันคิดว่าสิ่งนี้ใช้ได้ผล อย่างไรก็ตามฉันแนะนำว่าถ้าคุณไม่รู้ว่าวัตถุคือ NSData หรือ NSDictionary คุณมีปัญหาที่ใหญ่กว่า อะไรแมโครต่อไปของคุณไปได้หลังจากที่โทรนี้condenseToSingleNSData(id thing)? expandToNSArray(id thing)? ไม่ช้าก็เร็วคุณจะถามว่าคุณเรียนกับคลาสไหนดีกว่าที่จะทำในการอ้างอิงครั้งแรก
Cœur

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

1
สามเงื่อนไขแรกซ้ำซ้อนและคุณยังไม่ได้รวมแหล่งที่มาสำหรับstringByStrippingWhitespace
mattsven

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

1

วิธีที่ดีที่สุดในกรณีใด ๆ คือการตรวจสอบความยาวของสตริงที่กำหนดสำหรับสิ่งนี้ถ้าสตริงของคุณคือ myString แล้วรหัสคือ:

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


1

ตรวจสอบสิ่งนี้:

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

หรือ

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

หวังว่าจะช่วยได้


1

คุณสามารถตรวจสอบได้อย่างง่ายดายว่าสตริงว่างกับสิ่งนี้หรือไม่:

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

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


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

0

คุณสามารถมีสตริงว่างได้สองวิธี:

1) @ "" // ไม่มีที่ว่าง

2) @ "" // มีที่ว่าง

ในทางเทคนิคสตริงทั้งสองนั้นว่างเปล่า เราสามารถเขียนสิ่งที่ทั้งสองโดยใช้เพียงแค่ONEสภาพ

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


-1
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
    NSLog(@"String is empty");
}
else{
    NSLog(@"String is not empty");
}    

1
การตรวจสอบ null จะต้องเป็นครั้งแรก str.lengthจะโยนข้อยกเว้นถ้าstrเป็นโมฆะ
Jeffery Thomas

-2
if( [txtMobile.text length] == 0 )
{
    [Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.