2009-01-23 41 views
23

Tôi đang tìm cách xác định liệu giá trị chuỗi từ đầu vào của người dùng (UITextField) có phải là "trống" nếu không phải là không. Kiểm tra nếu [textField.text isEqualToString:""] là không đủ bởi vì tôi muốn tránh bất kỳ đầu vào trống/khoảng trắng (như nói một vài ký tự khoảng trắng).Cách tốt nhất để cắt khoảng trắng từ một chuỗi trong Cocoa Touch là gì?

Dường như có dấu hiệu của giải pháp tốt cho vấn đề cụ thể của tôi in this StOv post.

Về cơ bản nó đi một cái gì đó như thế này, nhưng tôi nghi ngờ có phải (hoặc phải) là một cách tốt hơn:

NSString *strResult; 
NSScanner* scanner = [NSScanner scannerWithString:textField.text]; 
BOOL hasValidChars = [scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] 
              intoString:&strResult]; 

// if hasValidChars == YES, we've got nonwhite space chars collected into strResult 

Đây rõ ràng chỉ hoạt động cho hoàn cảnh cụ thể của tôi, và thậm chí sau đó nó sẽ thất bại nếu ký tự đầu tiên là không gian nhưng dữ liệu tôi muốn theo sau. Vì vậy, tôi nhận ra tôi đã được một chút hư hỏng của Ruby, nhưng phải có một thành ngữ đã cố gắng và thực sự để cắt tỉa chuỗi trong ca cao.

Aaaand câu trả lời là đã ra khỏi đó, lời xin lỗi của tôi:

NSString của -stringByTrimmingCharactersInSet: sẽ làm điều đó:

Trả về một chuỗi mới làm bằng cách loại bỏ từ cả hai đầu của người nhận nhân vật chứa trong bộ ký tự đã cho.

Tôi vẫn tò mò muốn biết liệu có ai có cách nào khác/ưa thích làm điều này không.

+0

String.Length> 0 – elliotrock

Trả lời

48

Bạn đang sử dụng khoảng trắngAndNewlineCharacterSet, tốt. Nhưng thay vì sử dụng scanUpToCharactersFromSet, tại sao không sử dụng stringByTrimmingCharactersInSet? Một cái gì đó như thế này ...

strResult = [strResult stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

EDIT: Không nhận ra bạn đã tìm thấy chuỗiByTrimmingCharactersThiết lập cho đến sau khi tôi đăng này.

+1

không phải lo lắng, có người sẽ nhận được tín dụng cho câu trả lời, và tôi muốn cảm thấy như một công cụ đăng nó bản thân mình ;-) –

+0

Một câu hỏi về chuỗi kết quả. Có vẻ như đó là chuỗi tự động phát hành. Vì vậy, nó nên được phát hành sau khi sử dụng, phải không? –

+0

Cảm ơn bạn thân. Thực sự hữu ích. Một lần nữa xin cảm ơn –

13

Những gì bạn đang tìm kiếm là

[string stringByReplacingOccurrencesOfString:@" " withString:@""].

Xóa khoảng trắng ở giữa một chuỗi không được gọi là 'cắt tỉa'.

Cắt theo định nghĩa hoạt động từ các cạnh.

2

Để thực hiện dễ dàng hơn này về bản thân và thay vì làm một lớp con, bạn có thể sửa đổi các lớp của Apple hiện có và làm điều gì đó như

// 
// NSString+MyExtensions.h 
// 

@interface NSString (MyExtensions) 

- (NSString *)trimmed; 

@end 

và thực hiện

// 
// NSString+MyExtensions.m 
// 

#import "NSString+MyExtensions.h" 

@implementation NSString (MyExtensions) 

- (NSString *)trimmed { 
    return [self stringByTrimmingCharactersInSet: 
      [NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

@end 

Bây giờ bất cứ nơi nào trong bạn ứng dụng mà bạn sử dụng NSString,
bây giờ bạn có thể gọi [@" hello world " trimmed] như bên dưới

// 
// ViewController.m 
// 

#import "NSString+MyExtensions.h" 

@implementation ViewController 

- (void)viewDidLoad { 

    NSString *string = @"  This is a string "; 

    NSLog(@"The original string: %@ \n The trimmed string: %@\n\n", 
      string, 
      [string trimmed]); 

    string = @"     "; 

    if([string trimmed].length == 0) 
     NSLog(@"%@", @"String is empty! :O"); 

} 

@end 

Trong đó sẽ in ra

The original string:  This is a string  
The trimmed string: This is a string 

String is empty! :O 
Các vấn đề liên quan