Bagaimana saya bisa memeriksa apakah string ( NSString
) berisi string lain yang lebih kecil?
Saya berharap untuk sesuatu seperti:
NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
Tapi yang paling dekat yang bisa saya temukan adalah:
if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}
Ngomong-ngomong, apakah itu cara terbaik untuk menemukan jika string berisi string lain?
if ([string rangeOfString:@"hello"] == 0) {...}
ada kesalahan ketik ketidakcocokan untuk NSRange dan int. untuk memperbaikinya, Anda harus mengubah jalur menjadi yang berikut:if ([string rangeOfString:@"hello"].length == 0) {...}
Jawaban:
Kuncinya adalah memperhatikan bahwa
rangeOfString:
mengembalikan sebuahNSRange
struct, dan dokumentasi mengatakan bahwa itu mengembalikan struct{NSNotFound, 0}
jika "tumpukan jerami" tidak mengandung "jarum".Dan jika Anda menggunakan iOS 8 atau OS X Yosemite, Anda sekarang dapat melakukan: (* CATATAN: Ini AKAN crash aplikasi Anda jika kode ini dipanggil pada perangkat iOS7).
(Ini juga cara kerjanya di Swift)
👍
sumber
[string rangeOfString:@"bla"].location != NSNotFound
akan benar ketika stringnil
!Untuk iOS 8.0+ dan macOS 10.10+, Anda dapat menggunakan bahasa NSString
containsString:
.Untuk versi iOS dan macOS yang lebih lama, Anda dapat membuat kategori Anda sendiri (usang) untuk NSString:
Catatan: Amati komentar Daniel Galasko di bawah ini tentang penamaan
sumber
return [self rangeOfString:substring].location != NSNotFound;
dan memasukkannya ke dalam perpustakaan refactoring saya, es_ios_utils. github.com/peterdeweese/es_ios_utilsKarena ini tampaknya merupakan hasil peringkat tinggi di Google, saya ingin menambahkan ini:
iOS 8 dan OS X 10.10 menambahkan
containsString:
metode ini keNSString
. Versi terbaru dari contoh Dave DeLong untuk sistem tersebut:sumber
// Anda juga bisa menggunakan yang berikut:
sumber
Dengan iOS 8 dan Swift , kita dapat menggunakan
localizedCaseInsensitiveContainsString
metodesumber
Jadi secara pribadi saya benar-benar benci
NSNotFound
tetapi mengerti perlunya.Tetapi beberapa orang mungkin tidak memahami kompleksitas perbandingan terhadap NSNotFound
Misalnya, kode ini:
memiliki masalah:
1) Jelas jika
otherString = nil
kode ini macet. tes sederhana adalah:hasil !! Hancurkan !!
2) Apa yang tidak begitu jelas bagi seseorang yang baru ke tujuan-c adalah bahwa kode yang sama TIDAK akan crash ketika
string = nil
. Misalnya, kode ini:dan kode ini:
keduanya akan menghasilkan
Yang jelas BUKAN apa yang Anda inginkan.
Jadi solusi yang lebih baik yang saya percaya berfungsi adalah dengan menggunakan fakta bahwa rangeOfString mengembalikan panjang 0 sehingga kode yang lebih andal lebih baik adalah ini:
ATAU SIMPLY:
yang akan untuk kasus 1 dan 2 akan kembali
Itu 2 sen saya ;-)
Silakan periksa Gist saya untuk kode yang lebih bermanfaat.
sumber
Sebuah versi perbaikan dari P i 's solusi , kategori pada NSString, yang tidak hanya akan memberitahu, jika string ditemukan dalam string lain, tetapi juga mengambil berbagai dengan referensi, adalah:
Gunakan seperti:
sumber
Berikut ini cuplikan fungsi salin dan tempel:
sumber
Oneliner (Jumlah kode yang lebih kecil. KERING, karena Anda hanya punya satu
NSLog
):sumber
sumber
coba ini,
sumber
Solusi terbaik. Sesederhana ini! Jika Anda ingin menemukan kata atau bagian dari string. Anda dapat menggunakan kode ini. Dalam contoh ini kita akan memeriksa apakah nilai kata mengandung "acter".
sumber
Dalam Swift 4:
sumber
Jika Anda perlu ini, sekali tulis:
sumber
Dalam hal cepat, ini dapat digunakan
sumber
Jika tidak peduli tentang string case-sensitive. Coba ini sekali.
sumber
Silakan gunakan kode ini
sumber
Gunakan opsi NSCaseInsensitiveSearch dengan rangeOfString: options:
Hasil keluaran ditemukan: Ya
Opsi dapat "ored" bersama dan termasuk:
NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsSearch dan banyak lagi
sumber
String pertama mengandung atau tidak string kedua,
sumber
Coba ini:
Swift 4.1, 4.2:
Untuk Objective-C:
sumber
Swift 4 Dan Di Atas
Objektif-C
sumber
sumber
String
tipe. Kedua, kita memiliki semua benda. Jadi sebagai argumen Anda harus lulusNSString
. Saya memilih penghapusan karena kualitas jawaban yang buruk di bawah pertanyaan yang sangat aktif.Jika posisi string tertentu diperlukan, kode ini muncul di Swift 3.0 :
sumber