Bagaimana cara menguji jika NSString
kosong di Objective-C?
Bagaimana cara menguji jika NSString
kosong di Objective-C?
Jawaban:
Anda dapat memeriksa apakah [string length] == 0
. Ini akan memeriksa apakah itu string yang valid tetapi kosong (@ "") serta apakah nihil, karena memanggil length
nil juga akan mengembalikan 0.
ZERO WIDTH SPACE
yang tidak terlalu penting, karena @"\u200B"
merupakan karakter tetap jadi jika Anda menguji untuk string menjadi kosong, itu akan mengatakan itu bukan karena ada karakter di dalamnya. Hanya saja tidak dapat dicetak mengikuti standar Unicode.
![string length]
. Tampak lebih bersih.
Jawaban Marc benar. Tapi saya akan mengambil kesempatan ini untuk memasukkan pointer ke generalisasi Wil Shipley isEmpty
, yang dibagikannya di blog - nya :
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
:)
Pendekatan pertama valid, tetapi tidak berfungsi jika string Anda memiliki spasi kosong ( @" "
). Jadi, Anda harus menghapus spasi putih ini sebelum mengujinya.
Kode ini menghapus semua ruang kosong di kedua sisi string:
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
Satu ide bagus adalah membuat satu makro, jadi Anda tidak perlu mengetikkan garis monster ini:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
Sekarang Anda dapat menggunakan:
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
NSString
kategori yang menambahkan metode yang disebut trimmedString
yang melakukan persis apa yang Anda tulis.
whitespaceCharacterSet
tidak termasuk baris baru! Berikut adalah kategori yang saya tulis termasuk trim
dan beberapa metode berguna lainnya: github.com/alexch/unsuck/blob/master/unsuck/NSString%2BUnsuck.m github.com/alexch/unsuck/blob/master/unsuckTests/…
Salah satu solusi terbaik yang pernah saya lihat (lebih baik daripada Matt G) adalah fungsi inline yang ditingkatkan ini saya ambil pada beberapa repo Git Hub (yang milik Wil Shipley, tetapi saya tidak dapat menemukan tautannya):
// 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)
? Cepat atau lambat, Anda akan bertanya kelas apa yang Anda hadapi, lebih baik melakukannya dengan referensi pertama.
Anda sebaiknya menggunakan kategori ini:
@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
Sebagai kombinasi jawaban Marc dan Kyle.
Saya menempatkan ini:
@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
Masalahnya adalah jika self nil, fungsi ini tidak pernah dipanggil. Ini akan mengembalikan false, yang diinginkan.
-(BOOL)isEmpty{ return ![self isNotEmpty]}
tidak akan bekerja pada kategori.
condenseToSingleNSData(id thing)
? expandToNSArray(id thing)
? Cepat atau lambat, Anda akan bertanya kelas apa yang Anda hadapi, lebih baik melakukannya dengan referensi pertama.
Cukup berikan string Anda ke metode berikut:
+(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;
}
Cukup gunakan salah satu if
else
kondisi seperti yang ditunjukkan di bawah ini:
Metode 1:
if ([yourString isEqualToString:@""]) {
// yourString is empty.
} else {
// yourString has some text on it.
}
Metode 2:
if ([yourString length] == 0) {
// Empty yourString
} else {
// yourString is not empty
}
Meskipun ini adalah pertanyaan Objective C, saya perlu menggunakan NSString
Swift jadi saya juga akan memasukkan jawaban di sini.
let myNSString: NSString = ""
if myNSString.length == 0 {
print("String is empty.")
}
Atau jika NSString
Opsional:
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.")
}
}
Versi Swift normal String
adalah
let myString: String = ""
if myString.isEmpty {
print("String is empty.")
}
Lihat juga: Periksa string kosong di Swift?
Mungkin jawaban ini adalah duplikat dari jawaban yang sudah diberikan, tetapi saya melakukan sedikit modifikasi dan perubahan dalam urutan memeriksa kondisi. Silakan merujuk kode di bawah ini:
+(BOOL)isStringEmpty:(NSString *)str
{
if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
return YES;
}
return NO;
}
Anda dapat memeriksa apakah string Anda kosong atau tidak saya menggunakan metode ini:
+(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;
}
Praktik terbaik adalah membuat kelas bersama mengatakan UtilityClass dan iklankan metode ini sehingga Anda dapat menggunakan metode ini dengan hanya memanggilnya melalui aplikasi Anda.
Anda memiliki 2 metode untuk memeriksa apakah string kosong atau tidak:
Misalkan nama string Anda NSString *strIsEmpty
.
Metode 1:
if(strIsEmpty.length==0)
{
//String is empty
}
else
{
//String is not empty
}
Metode 2:
if([strIsEmpty isEqualToString:@""])
{
//String is empty
}
else
{
//String is not empty
}
Pilih salah satu dari metode di atas dan ketahui apakah string kosong atau tidak.
Jadi selain dari konsep dasar untuk memeriksa panjang string kurang dari 1, penting untuk mempertimbangkan konteks secara mendalam. Bahasa manusia atau komputer atau yang lain mungkin memiliki definisi string kosong yang berbeda dan dalam bahasa yang sama, konteks tambahan selanjutnya dapat mengubah maknanya.
Katakanlah string kosong berarti "string yang tidak mengandung karakter apa pun yang signifikan dalam konteks saat ini".
Ini bisa berarti secara visual, karena dalam warna dan warna latar belakang sama dalam string yang dikaitkan. Secara efektif kosong.
Ini bisa berarti kosong dari karakter yang bermakna. Semua titik atau semua garis putus-putus atau semua garis bawah mungkin dianggap kosong. Selanjutnya, kosong dari karakter signifikan yang berarti dapat berarti string yang tidak memiliki karakter yang dipahami pembaca. Mereka bisa berupa karakter dalam bahasa atau karakter yang ditetapkan sebagai tidak berarti bagi pembaca. Kita dapat mendefinisikannya sedikit berbeda dengan mengatakan string tidak membentuk kata-kata yang dikenal dalam bahasa tertentu.
Kita dapat mengatakan kosong adalah fungsi dari persentase ruang negatif dalam mesin terbang yang diberikan.
Bahkan urutan karakter yang tidak dapat dicetak tanpa representasi visual umum tidak benar-benar kosong. Karakter kontrol muncul di pikiran. Terutama kisaran ASCII rendah (saya terkejut tidak ada yang menyebutkan mereka karena mereka menyemprot banyak sistem dan bukan spasi karena mereka biasanya tidak memiliki mesin terbang dan tidak ada metrik visual). Namun panjang tali bukanlah nol.
Kesimpulan. Panjang saja bukan satu-satunya ukuran di sini. Keanggotaan kontekstual juga cukup penting.
Character Set keanggotaan adalah ukuran tambahan umum yang sangat penting. Urutan yang bermakna juga cukup umum. (pikirkan SETI atau crypto atau captcha) Tambahan set konteks yang lebih abstrak juga ada.
Jadi pikirkan baik-baik sebelum menganggap string hanya kosong berdasarkan panjang atau spasi.
Posting yang sangat berguna, untuk menambahkan dukungan NSDictionary juga satu perubahan kecil
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)
? Cepat atau lambat, Anda akan bertanya kelas apa yang Anda hadapi, lebih baik melakukannya dengan referensi pertama.
- (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
Cara terbaik adalah menggunakan kategorinya.
Anda dapat memeriksa fungsi berikut. Yang memiliki semua kondisi untuk diperiksa.
-(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;
}
if (string.length == 0) stringIsEmpty;
Anda dapat dengan mudah memeriksa apakah string kosong dengan ini:
if ([yourstring isEqualToString:@""]) {
// execute your action here if string is empty
}
Saya telah memeriksa string kosong menggunakan kode di bawah ini:
//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"];
}
Sesederhana if([myString isEqual:@""])
atauif([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;
}
Anda dapat memiliki string kosong dengan dua cara:
1) @ "" // Tidak mengandung ruang
2) @ "" // Mengandung Ruang
Secara teknis kedua senarnya kosong. Kita dapat menulis kedua hal itu hanya dengan menggunakan ONE Condition
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
NSLog(@"Empty String");
}
else
{
NSLog(@"String contains some value");
}
Coba yang berikut ini
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
akan melempar pengecualian jika str
nol.
if( [txtMobile.text length] == 0 )
{
[Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}
@"\u200B"
(hanya terdiri dari karakter Unicode ZERO WIDTH SPACE . Mencetaknya akan mencetak 0 karakter (memverifikasi menggunakan font monospace), tetapi string.length akan memberikan 1. Ada karakter Unicode lainnya (seperti KARAKTER PENGGANTI OBYEK ) yang berperilaku sama. Anda dapat dapatkan yang terakhir saat