2011-09-01 14 views

Trả lời

101
NSString *str = @"   "; 
NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet]; 
if ([[str stringByTrimmingCharactersInSet: set] length] == 0) 
{ 
    // String contains only whitespace. 
} 
+21

Tùy thuộc vào tình huống mà người ta có thể muốn sử dụng 'khoảng trắng vàNewlineCharacterSet' thay thế (không exa ctly những gì nó nói trên tin). – BoltClock

0

Cắt không gian và kiểm tra số ký tự còn lại. Hãy xem bài này here

8

Hãy thử tước nó không gian và so sánh nó với @ "":

NSString *probablyEmpty = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
BOOL wereOnlySpaces = [probablyEmpty isEqualToString:@""]; 
2

Hãy thử điều này:

[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

hoặc

[mystring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
+0

Đây là phương thức 'NSMutableString'. –

+5

Um, không phải vậy. Nó trả về một NSString mới và được khai báo trong NSString.h. – picciano

+0

Thực ra nó không được định nghĩa ở bất cứ đâu. –

0

đây là một danh mục có thể tái sử dụng dễ dàng trên NSString dựa trên câu trả lời của @Alexander Akers, nhưng cũng trả YES nếu chuỗi chứa "dòng mới" ...

@interface NSString (WhiteSpaceDetect) 
@property (readonly) BOOL isOnlyWhitespace; 
@end 
@implementation NSString (WhiteSpaceDetect) 
- (BOOL) isOnlyWhitespace { 
    return ![self stringByTrimmingCharactersInSet: 
      [NSCharacterSet whitespaceAndNewlineCharacterSet]].length; 
} 
@end 

và cho những người bạn tâm hồn untrusting ngoài kia ..

#define WHITE_TEST(x) for (id z in x) printf("\"%s\" : %s\n",[z UTF8String], [z isOnlyWhitespace] ? "YES" :"NO") 

WHITE_TEST(({ @[ 

    @"Applebottom", 
    @"jeans\n", 
    @"\n", 
    @"" 
    "", 
    @" \ 
    \ 
    ", 
    @" " 
];})); 

"Applebottom" : NO 
"jeans 
" : NO 
" 
" : YES 
"" : YES 
" " : YES 
" " : YES 
-1

Đây là một đơn giản Giải pháp Swift:

//Check if string contains only empty spaces and new line characters 
static func isStringEmpty(#text: String) -> Bool { 
    let characterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet() 
    let newText = text.stringByTrimmingCharactersInSet(characterSet) 
    return newText.isEmpty 
} 
+0

tại sao bỏ phiếu xuống? – Esqarrouth

-1

Dưới đây là mã phiên bản Swift cho cùng,

var str = "Hello World" 
if count(str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0 { 
    // String is empty or contains only white spaces 
} 
else { 
    // String is not empty and contains other characters 
} 

Hoặc bạn có thể viết một phần mở rộng chuỗi đơn giản như dưới đây và sử dụng mã cùng với khả năng đọc tốt hơn ở nhiều nơi.

extension String { 
    func isEmptyOrContainsOnlySpaces() -> Bool { 
     return count(self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())) == 0 
    } 
} 

và chỉ cần gọi nó bằng bất kỳ chuỗi như thế này,

var str1 = " " 
if str.isEmptyOrContainsOnlySpaces() { 
    // custom code e.g Show an alert 
} 
7

Đó là nhanh hơn đáng kể để kiểm tra một loạt các ký tự không phải khoảng trắng thay vì cắt tỉa toàn bộ chuỗi.

NSCharacterSet *inverted = [[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet]; 
NSRange range = [string rangeOfCharacterFromSet:inverted]; 
BOOL empty = (range.location == NSNotFound); 

Lưu ý rằng "đã điền" có lẽ là trường hợp phổ biến nhất với sự kết hợp không gian và văn bản.

testSpeedOfSearchFilled - 0.012 sec 
testSpeedOfTrimFilled - 0.475 sec 
testSpeedOfSearchEmpty - 1.794 sec 
testSpeedOfTrimEmpty - 3.032 sec 

Thử nghiệm chạy trên iPhone 6+ của tôi. Mã số here. Dán vào bất kỳ lớp con XCTestCase nào.

+2

Câu trả lời này là tốt nhất. Tôi đã thực sự ngạc nhiên khi nhiều người mù quáng đi tìm giải pháp cắt tỉa. Bạn nên sửa chữa một lỗi đánh máy mặc dù: nếu range.location! = NSNotFound nó có nghĩa là bạn đã tìm thấy một char không-WS, có nghĩa là chuỗi không rỗng. Vì vậy, bạn cần phải đảo ngược tình trạng này. – battlmonstr

0

Phải sử dụng mã này cho Swift 3:

func isEmptyOrContainsOnlySpaces() -> Bool { 

    return self.trimmingCharacters(in: .whitespaces).characters.count == 0 
} 
0

Tôi thực sự ngạc nhiên rằng tôi là người đầu tiên gợi ý Regular Expression

NSString *string = @"   "; 
NSString *pattern = @"^\\s*$"; 
NSRegularExpression *expression = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; 
NSArray *matches = [expression matchesInString:string options:0 range:NSMakeRange(0, string.length)]; 
BOOL isOnlyWhitespace = matches.count; 

Hoặc trong Swift:

let string = "   " 
let pattern = "^\\s*$" 
let expression = try! NSRegularExpression(pattern:pattern, options:[]) 
let matches = expression.matches(in: string, options: [], range:NSRange(location: 0, length: string.utf16.count)) 
let isOnlyWhitespace = !matches.isEmpty 
Các vấn đề liên quan