ฉันจะทดสอบได้อย่างไรว่าวัตถุ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 #