Làm cách nào để kiểm tra nếu một mục NSString
trống trong Objective-C?
Làm cách nào để kiểm tra nếu một mục NSString
trống trong Objective-C?
Câu trả lời:
Bạn có thể kiểm tra nếu [string length] == 0
. Điều này sẽ kiểm tra xem đó có phải là một chuỗi hợp lệ nhưng trống (@ "") cũng như nếu nó không, vì việc gọi length
vào số không cũng sẽ trả về 0.
ZERO WIDTH SPACE
không thực sự quan trọng, vì dù sao cũng @"\u200B"
là một ký tự nên nếu bạn kiểm tra chuỗi có trống không, nó sẽ cho biết đó không phải là vì có một ký tự trong đó. Nó chỉ không thể in được theo tiêu chuẩn Unicode.
![string length]
. Có vẻ sạch sẽ hơn.
Câu trả lời của Marc là chính xác. Nhưng tôi sẽ nhân cơ hội này để đưa một con trỏ tới tổng quát của Wil Shipley isEmpty
, mà anh ấy đã chia sẻ trên blog của mình :
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
:)
Cách tiếp cận đầu tiên là hợp lệ, nhưng không hoạt động nếu chuỗi của bạn có khoảng trắng ( @" "
). Vì vậy, bạn phải xóa khoảng trắng này trước khi thử nghiệm nó.
Mã này xóa tất cả các khoảng trống ở cả hai phía của chuỗi:
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
Một ý tưởng hay là tạo một macro, vì vậy bạn không cần phải nhập dòng quái vật này:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
Bây giờ bạn có thể sử dụng:
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
NSString
thể loại có thêm một phương thức gọi là trimmedString
chính xác những gì bạn đã viết.
whitespaceCharacterSet
không bao gồm các dòng mới! Dưới đây là một loại tôi đã viết trong đó trim
và một số phương pháp hữu ích khác: github.com/alexch/unsuck/blob/master/unsuck/NSString%2BUnsuck.m github.com/alexch/unsuck/blob/master/unsuckTests/...
Một trong những giải pháp tốt nhất tôi từng thấy (tốt hơn so với giải pháp của Matt G) là chức năng nội tuyến được cải thiện này tôi đã chọn trên một số repo Git Hub (của Wil Shipley, nhưng tôi không thể tìm thấy liên kết):
// 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)
? Sớm hay muộn, bạn sẽ hỏi bạn đang đối phó với loại lớp nào, tốt hơn là thực hiện nó trong tài liệu tham khảo đầu tiên.
Bạn nên sử dụng loại này tốt hơn:
@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
Là sự kết hợp giữa câu trả lời của Marc và Kyle.
Tôi đặt cái này:
@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
Vấn đề là nếu bản thân không, chức năng này không bao giờ được gọi. Nó sẽ trả về false, đó là mong muốn.
-(BOOL)isEmpty{ return ![self isNotEmpty]}
sẽ không hoạt động trên danh mục.
condenseToSingleNSData(id thing)
? expandToNSArray(id thing)
? Sớm hay muộn, bạn sẽ hỏi bạn đang đối phó với loại lớp nào, tốt hơn là thực hiện nó trong tài liệu tham khảo đầu tiên.
Chỉ cần chuyển chuỗi của bạn đến phương thức sau:
+(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;
}
Chỉ cần sử dụng một trong những if
else
điều kiện như hình dưới đây:
Cách 1:
if ([yourString isEqualToString:@""]) {
// yourString is empty.
} else {
// yourString has some text on it.
}
Cách 2:
if ([yourString length] == 0) {
// Empty yourString
} else {
// yourString is not empty
}
Mặc dù đây là câu hỏi Mục tiêu C, tôi cần sử dụng NSString
trong Swift vì vậy tôi cũng sẽ bao gồm một câu trả lời ở đây.
let myNSString: NSString = ""
if myNSString.length == 0 {
print("String is empty.")
}
Hoặc nếu NSString
là Tùy chọn:
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
Phiên bản Swift bình thường là
let myString: String = ""
if myString.isEmpty {
print("String is empty.")
}
Xem thêm: Kiểm tra chuỗi trống trong Swift?
Có thể câu trả lời này là bản sao của các câu trả lời đã được đưa ra, nhưng tôi đã thực hiện một vài sửa đổi và thay đổi theo thứ tự kiểm tra các điều kiện. Vui lòng tham khảo mã dưới đây:
+(BOOL)isStringEmpty:(NSString *)str
{
if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
return YES;
}
return NO;
}
Bạn có thể kiểm tra xem chuỗi của bạn có trống hay không bằng cách sử dụng phương thức này:
+(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;
}
Cách thực hành tốt nhất là tạo một lớp chia sẻ nói UtilityClass và quảng cáo phương thức này để bạn có thể sử dụng phương thức này bằng cách gọi nó thông qua ứng dụng của bạn.
Bạn có 2 phương pháp để kiểm tra xem chuỗi có trống hay không:
Hãy giả sử tên chuỗi của bạn là NSString *strIsEmpty
.
Cách 1:
if(strIsEmpty.length==0)
{
//String is empty
}
else
{
//String is not empty
}
Cách 2:
if([strIsEmpty isEqualToString:@""])
{
//String is empty
}
else
{
//String is not empty
}
Chọn bất kỳ phương thức nào ở trên và nhận biết chuỗi có trống hay không.
Chỉ cần kiểm tra độ dài chuỗi của bạn
if (!yourString.length)
{
//your code
}
một tin nhắn tới NIL sẽ trả về nil hoặc 0, vì vậy không cần phải kiểm tra cho nil :).
Chúc mừng mã hóa ...
Vì vậy, ngoài khái niệm cơ bản về kiểm tra độ dài chuỗi nhỏ hơn 1, điều quan trọng là phải xem xét bối cảnh sâu sắc. Ngôn ngữ của con người hoặc máy tính hoặc nói cách khác có thể có các định nghĩa khác nhau về các chuỗi trống và trong cùng các ngôn ngữ đó, ngữ cảnh bổ sung có thể thay đổi thêm ý nghĩa.
Giả sử chuỗi rỗng có nghĩa là "một chuỗi không chứa bất kỳ ký tự nào có ý nghĩa trong ngữ cảnh hiện tại".
Điều này có thể có nghĩa trực quan, vì màu sắc và màu nền giống nhau trong một chuỗi được quy. Hiệu quả trống rỗng.
Điều này có thể có nghĩa là trống rỗng của các nhân vật có ý nghĩa. Tất cả các dấu chấm hoặc tất cả dấu gạch ngang hoặc tất cả dấu gạch dưới có thể được coi là trống. Hơn nữa, trống các ký tự có ý nghĩa có thể có nghĩa là một chuỗi không có ký tự mà người đọc hiểu. Chúng có thể là các ký tự trong một ngôn ngữ hoặc ký tự được định nghĩa là vô nghĩa đối với người đọc. Chúng ta có thể định nghĩa nó một chút khác nhau để nói chuỗi hình thành không có từ đã biết trong một ngôn ngữ nhất định.
Chúng ta có thể nói trống là một hàm của tỷ lệ phần trăm không gian âm trong glyphs được hiển thị.
Ngay cả một chuỗi các ký tự không in được mà không có biểu diễn trực quan chung cũng không thực sự trống rỗng. Nhân vật điều khiển đến với tâm trí. Đặc biệt là phạm vi ASCII thấp (tôi ngạc nhiên không ai đề cập đến chúng vì chúng có rất nhiều hệ thống và không có khoảng trắng vì chúng thường không có glyphs và không có số liệu trực quan). Tuy nhiên, độ dài chuỗi không bằng không.
Phần kết luận. Chiều dài một mình không phải là biện pháp duy nhất ở đây. Thành viên thiết lập bối cảnh cũng khá quan trọng.
Tư cách thành viên là một biện pháp bổ sung phổ biến rất quan trọng. Trình tự có ý nghĩa cũng là một thứ khá phổ biến. (nghĩ rằng SETI hoặc tiền điện tử hoặc captcha) Cũng tồn tại thêm các bộ bối cảnh trừu tượng.
Vì vậy, hãy suy nghĩ cẩn thận trước khi giả sử một chuỗi chỉ trống dựa trên chiều dài hoặc khoảng trắng.
Bài đăng rất hữu ích, để thêm hỗ trợ NSDipedia cũng như một thay đổi nhỏ
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)
? Sớm hay muộn, bạn sẽ hỏi bạn đang đối phó với loại lớp nào, tốt hơn là thực hiện nó trong tài liệu tham khảo đầu tiên.
- (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
Cách tốt nhất là sử dụng danh mục.
Bạn có thể kiểm tra các chức năng sau. Mà có tất cả các điều kiện để kiểm tra.
-(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;
}
Bạn có thể dễ dàng kiểm tra xem chuỗi có trống không với điều này:
if ([yourstring isEqualToString:@""]) {
// execute your action here if string is empty
}
Tôi đã kiểm tra một chuỗi trống bằng cách sử dụng mã dưới đây:
//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"];
}
Nó đơn giản như if([myString isEqual:@""])
hoặcif([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;
}
Bạn có thể có một chuỗi rỗng theo hai cách:
1) @ "" // Không chứa không gian
2) @ "" // Chứa không gian
Về mặt kỹ thuật cả hai chuỗi đều trống. Chúng ta có thể viết cả hai điều chỉ bằng cách sử dụng MỘT Điều kiện
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
NSLog(@"Empty String");
}
else
{
NSLog(@"String contains some value");
}
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
NSLog(@"String is empty");
}
else{
NSLog(@"String is not empty");
}
str.length
sẽ ném một ngoại lệ nếu str
là null.
if( [txtMobile.text length] == 0 )
{
[Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}
@"\u200B"
(chỉ bao gồm ký tự Unicode ZERO WIDTH SPACE . In ra sẽ in 0 ký tự (xác minh bằng phông chữ đơn cách), nhưng string.length sẽ cung cấp 1. Có các ký tự Unicode khác (như CHARAC REPLACEMENT CHARACTER ) hoạt động tương tự. có được cái sau khi phân tích văn bản PDF.