Thay thế chuỗi trong Objective-C


Câu trả lời:


781

Bạn có thể sử dụng phương pháp

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

... để có được một chuỗi mới với một chuỗi con được thay thế (Xem NSStringtài liệu cho những người khác)

Ví dụ sử dụng

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

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];

2
Tôi nghĩ rằng điểm có NSString và một lớp con NSMutableString là do một thể hiện của NSString là không thể thay đổi . Trong khi - giống như bất kỳ người tỉnh táo nào, tôi thà có vịt hơn dây bất cứ ngày nào - thực tế là bạn chỉ ghi đè lên nội dung của strtâm trí tôi.
ele

1
Nhưng tôi đoán địa chỉ strthay đổi trong quá trình
Colas

16
nó không thay đổi str bây giờ chứa một chuỗi hoàn toàn mới. chuỗiByReplacesOccurencesOfString KHÔNG làm biến đổi chuỗi. Nó chỉ đơn giản là trả về một chuỗi mới.
Septiadi Agus

22

NSStringcác đối tượng là bất biến (chúng không thể thay đổi), nhưng có một lớp con có thể thay đổi NSMutableString, cung cấp cho bạn một số phương thức để thay thế các ký tự trong một chuỗi. Có lẽ đó là đặt cược tốt nhất của bạn.


10

Nếu bạn muốn thay thế nhiều chuỗi:

NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo

7

Nó cũng thay thế chuỗi có thể nhìn thấy bằng chuỗiByReplacesChar characterInRange: withString:

for (int i = 0; i < card.length - 4; i++) {

    if (![[card substringWithRange:NSMakeRange(i, 1)] isEqual:@" "]) {

        NSRange range = NSMakeRange(i, 1);
        card = [card stringByReplacingCharactersInRange:range withString:@"*"];

    }

} //out: **** **** **** 1234

0

Vấn đề tồn tại trong các phiên bản cũ trên iOS. mới nhất, từ phải sang trái hoạt động tốt. Những gì tôi đã làm, như sau:

Đầu tiên tôi kiểm tra phiên bản iOS:

if (![self compareCurVersionTo:4 minor:3 point:0])

Hơn:

// set RTL on the start on each line (except the first)  
myUITextView.text = [myUITextView.text stringByReplacingOccurrencesOfString:@"\n"
                                                           withString:@"\u202B\n"];

0
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"];

Vui lòng sử dụng liên kết chỉnh sửa để giải thích cách mã này hoạt động và không chỉ cung cấp mã, vì một lời giải thích có nhiều khả năng giúp người đọc trong tương lai. Xem thêm Cách trả lời . nguồn
Jed Fox
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.