Objective-C - Xóa ký tự cuối cùng khỏi chuỗi


Câu trả lời:


418

Trong lớp trình điều khiển của bạn, tạo một phương thức hành động, bạn sẽ nối nút lên trong Trình tạo giao diện. Bên trong phương thức đó, bạn có thể cắt chuỗi của mình như thế này:


if ([string length] > 0) {
    string = [string substringToIndex:[string length] - 1];
} else {
    //no characters to delete... attempting to do so will result in a crash
}






Nếu bạn muốn một cách thú vị để làm điều này chỉ trong một dòng mã, bạn có thể viết nó thành:

string = [string substringToIndex:string.length-(string.length>0)];

* Giải thích về đoạn mã một dòng ưa thích:

Nếu có một ký tự cần xóa (nghĩa là độ dài của chuỗi lớn hơn 0)
     (string.length>0)trả về, 1 do đó, trả về mã:
          string = [string substringToIndex:string.length-1];

Nếu KHÔNG có ký tự để xóa (nghĩa là độ dài của ký tự chuỗi KHÔNG lớn hơn 0)
     (string.length>0)trả về, 0 do đó làm cho mã trả về:
          string = [string substringToIndex:string.length-0];
     Điều này ngăn sự cố.


8
Giải pháp của bạn có 1 lỗi. Nó phải là [chuỗi con chuỗi String Index: [độ dài chuỗi] - 1];
Jim Correia

"Chuỗi" có đề cập đến "chuỗi.text" hay chỉ tên chuỗi
Omar

Cảm ơn Jim, tôi đoán là quá sớm vào buổi sáng cho số học. :) Omar, chuỗi đề cập đến một biến gọi là chuỗi chứa văn bản bạn muốn sửa đổi. Bạn có thể xem tài liệu về các cách khác nhau mà bạn có thể tạo đối tượng NSString, từ tệp trên đĩa hoặc từ dữ liệu trong ứng dụng của bạn.
Marc Charbonneau

1
@DonalRafferty đảm bảo chuỗi của bạn không phải là số không
quantumpotato

Không sao nếu chuỗi không - gọi một phương thức trả về giá trị nguyên sẽ trả về 0 trong Obj-C (lưu ý rằng điều đó KHÔNG đúng với các giá trị trả về dấu phẩy động). Vì vậy, nếu tuyên bố là tương đương với yêu cầu string != nil && [string length] > 0. Cơ hội là biến chuỗi của Donal đang được phát hành.
Marc Charbonneau

53

Nếu đó là NSMutableString (mà tôi muốn giới thiệu vì bạn đang thay đổi nó một cách linh hoạt), bạn có thể sử dụng:

[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];

8

Các giải pháp được đưa ra ở đây thực sự không tính đến các ký tự Unicode nhiều byte ("ký tự tổng hợp") và có thể dẫn đến các chuỗi Unicode không hợp lệ.

Trong thực tế, tệp tiêu đề iOS có chứa phần khai báo substringToIndexchứa nhận xét sau:

Gợi ý: Sử dụng với RangeOfComposesCharacterSequencesForRange: để tránh phá vỡ các ký tự sáng tác

Xem cách sử dụngrangeOfComposedCharacterSequenceAtIndex: để xóa ký tự cuối cùng một cách chính xác.


6

Tài liệu này là bạn của bạn, NSStringhỗ trợ một cuộc gọi substringWithRangecó thể rút ngắn chuỗi mà bạn có trả về Chuỗi rút ngắn. Bạn không thể sửa đổi một thể hiện của NSStringnó là bất biến. Nếu bạn có NSMutableStringmột phương thức được gọi là deleteCharactersInRangecó thể sửa đổi chuỗi tại chỗ

...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...

1
NSMakeRange đôi khi có thể làm cho việc điền vào một cấu trúc phạm vi trông thanh lịch hơn một chút.
dreamlax

@Harald, substringWithRange:trả lại a NSString*. Hãy lưu ý về con trỏ.
Thomas Nadin
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.