Xóa các ký tự khỏi NSString?


95
NSString *myString = @"A B C D E F G";

Tôi muốn xóa các khoảng trắng, vì vậy chuỗi mới sẽ là "ABCDEFG".

Câu trả lời:


280

Bạn đã có thể sử dụng:

NSString *stringWithoutSpaces = [myString 
   stringByReplacingOccurrencesOfString:@" " withString:@""];

Vui lòng bạn có thể định dạng các đoạn mã bằng phông chữ monospaced để dễ đọc không. Hiện tại, việc phân biệt chuỗi đầu tiên là một chút khó khăn
Mike Abdullah

4
Lưu ý rằng "lần xuất hiện" được viết bằng hai chữ r.

cộng với 1 trong hy vọng đạt 256. SMH
Will Von Ullrich

Điều này CHỈ hoạt động nếu 'khoảng trắng' hoạt động tốt Giá trị ASCII = 32 (% 20) ký tự. Để xóa TẤT CẢ các ký tự khoảng trắng có thể có, hãy sử dụng giải pháp của Jim Dovey bên dưới.
Linasses

80

Nếu bạn muốn hỗ trợ nhiều khoảng trắng cùng một lúc hoặc hỗ trợ bất kỳ khoảng trắng nào, bạn có thể làm như sau:

NSString* noSpaces =
    [[myString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
                           componentsJoinedByString:@""];

5
Nó hữu ích hơn cho việc sử dụng chung.
mxg

tôi thích nó! Tôi muốn xóa tất cả các ký tự đặc biệt trong số điện thoại và chỉ giữ lại các chữ số.
karim

dễ dàng hơn nhiều: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet khoảng trắngCharacterSet]];
Daniel

3
Việc cắt bớt chỉ loại bỏ các ký tự phù hợp khi chúng xuất hiện ở đầu và cuối chuỗi, do đó, `ABCDEF` sẽ trở thành A B C D E F.
Jim Dovey

11

Lấy từ NSString

stringByReplacingOccurrencesOfString:withString:

Trả về một chuỗi mới trong đó tất cả các lần xuất hiện của một chuỗi đích trong bộ thu được thay thế bằng một chuỗi đã cho khác.

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

Thông số

Mục tiêu

The string to replace.

thay thế

The string with which to replace target.

Giá trị trả lại

Một chuỗi mới trong đó tất cả các lần xuất hiện của mục tiêu trong máy thu được thay thế bằng thay thế.


11

Tất cả ở trên sẽ hoạt động tốt. Nhưng phương pháp đúng là:

yourString = [yourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

Nó sẽ hoạt động giống như một phương pháp TRIM. Nó sẽ loại bỏ tất cả các khoảng trống phía trước và sau.

Cảm ơn


7
Không, nó chỉ xóa khoảng trắng từ đầu và cuối chuỗi, không xóa khoảng trắng giữa các ký tự khác.
Jim Dovey

@JimDovey Tôi đã đề cập đến điều này trong nhận xét của mình. # Nó sẽ hoạt động giống như một phương pháp TRIM. Nó sẽ xóa tất cả các khoảng trắng trước và sau. #
Mitesh Khatri.

2
@MiteshKhatri Bạn làm được, nhưng nó vẫn không giải quyết được vấn đề ban đầu, đó là loại bỏ tất cả khoảng trắng từ bên trong chuỗi, không chỉ khoảng trắng đầu & cuối.
Jim Dovey

@JimDovey để loại bỏ tất cả các khoảng trắng, hãy sử dụng mã bên dưới: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Mitesh Khatri,

1
Điều đó sẽ vẫn chỉ xóa các ký tự khoảng trắng ASCII; những thứ như khoảng trắng bằng không, khoảng trắng không ngắt Unicode, dòng mới, nguồn cấp dữ liệu biểu mẫu, tab, tab dọc, v.v. sẽ vẫn ở trong chuỗi. Do đó sự tồn tại của [NSCharacterSet whitespaceCharacterSet][NSCharacterSet whitespaceAndNewlineCharacterSet].
Jim Dovey

6

nếu chuỗi có thể thay đổi , thì bạn có thể biến đổi nó tại chỗ bằng cách sử dụng biểu mẫu này:

[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

điều này cũng hữu ích nếu bạn muốn kết quả là một phiên bản có thể thay đổi của một chuỗi đầu vào:

NSMutableString * string = [concreteString mutableCopy];
[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

3

Bạn có thể thử cái này

- (NSString *)stripRemoveSpaceFrom:(NSString *)str {
    while ([str rangeOfString:@"  "].location != NSNotFound) {
        str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
    }
    return str;
}

Hy vọng rằng cái này sẽ giúp đc bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.