Objective-C - Hapus karakter terakhir dari string

151

Di Objective-C untuk iOS, bagaimana saya menghapus karakter terakhir dari string menggunakan aksi tombol?

Omar
sumber

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.

Marc Charbonneau
sumber
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)];
Dave DeLong
sumber
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.

pengguna1071136
sumber
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];
...
Harald Scheirich
sumber
1
NSMakeRange terkadang dapat membuat mengisi rentang struct terlihat sedikit lebih elegan.
dreamlax
@ Harald, substringWithRange:mengembalikan a NSString*. Perhatikan pointer.
Thomas Nadin