Objective-C - Hapus karakter terakhir dari string


Jawaban:


418

Di kelas pengontrol Anda, buat metode tindakan yang akan Anda kaitkan tombol di dalam Interface Builder. Di dalam metode itu Anda dapat memotong string Anda seperti ini:


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






Jika Anda ingin cara mewah melakukan ini hanya dalam satu baris kode Anda dapat menuliskannya sebagai:

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

* Penjelasan potongan kode mewah satu baris:

Jika ada karakter yang akan dihapus (yaitu panjang string lebih besar dari 0)
     (string.length>0)mengembalikan 1 sehingga membuat kode kembali:
          string = [string substringToIndex:string.length-1];

Jika TIDAK ada karakter untuk dihapus (yaitu panjang karakter string TIDAK lebih besar dari 0)
     (string.length>0)mengembalikan 0 sehingga membuat kode kembali:
          string = [string substringToIndex:string.length-0];
     Yang mencegah crash.


8
Solusi Anda memiliki bug 1 bug. Itu harus [string substringToIndex: [panjang string] - 1];
Jim Correia

Apakah "string" merujuk ke "string.text" atau hanya nama string
Omar

Terima kasih Jim, masih terlalu pagi untuk perhitungan, kurasa. :) Omar, string merujuk ke variabel yang disebut string yang menyimpan teks yang ingin Anda modifikasi. Anda dapat melihat dokumentasi untuk berbagai cara Anda dapat membuat objek NSString, baik dari file pada disk atau dari data dalam aplikasi Anda.
Marc Charbonneau

1
@DonalRafferty pastikan string Anda tidak nol
quantumpotato

Tidak apa-apa jika string nil-- memanggil metode yang mengembalikan nilai integer akan mengembalikan 0 dalam Obj-C (perhatikan bahwa hal yang sama TIDAK berlaku untuk nilai pengembalian floating point). Sehingga kalau pernyataan itu setara dengan bertanya string != nil && [string length] > 0. Kemungkinan variabel string Donal sedang dirilis berlebihan.
Marc Charbonneau

53

Jika ini adalah NSMutableString (yang saya sarankan karena Anda mengubahnya secara dinamis), Anda dapat menggunakan:

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

8

Solusi yang diberikan di sini sebenarnya tidak memperhitungkan karakter Unicode multi-byte ("karakter tersusun"), dan dapat mengakibatkan string Unicode tidak valid.

Bahkan, file header iOS yang berisi deklarasi substringToIndexberisi komentar berikut:

Petunjuk: Gunakan dengan rangeOfComposedCharacterSequencesForRange: untuk menghindari putusnya karakter yang dikomposisikan

Lihat cara menggunakanrangeOfComposedCharacterSequenceAtIndex: untuk menghapus karakter terakhir dengan benar.


6

Dokumentasi adalah teman Anda, NSStringmendukung panggilan substringWithRangeyang dapat mempersingkat string yang Anda kembalikan String yang dipersingkat. Anda tidak dapat mengubah contoh NSStringitu tidak berubah. Jika Anda memiliki NSMutableStringadalah memiliki metode yang disebut deleteCharactersInRangeyang dapat memodifikasi string di tempat

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

1
NSMakeRange terkadang dapat membuat mengisi rentang struct terlihat sedikit lebih elegan.
dreamlax

@ Harald, substringWithRange:mengembalikan a NSString*. Perhatikan pointer.
Thomas Nadin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.