Cara memeriksa apakah NSString dimulai dengan karakter tertentu

210

Bagaimana Anda memeriksa apakah NSString dimulai dengan karakter tertentu (karakter *).

* Adalah indikator untuk tipe sel, jadi saya perlu isi NSString ini tanpa *, tetapi perlu tahu apakah * ada.

Xetius
sumber

Jawaban:

453

Anda dapat menggunakan -hasPrefix:metode NSString:

Tujuan-C:

NSString* output = nil;
if([string hasPrefix:@"*"]) {
    output = [string substringFromIndex:1];
}

Cepat:

var output:String?
if string.hasPrefix("*") {
    output = string.substringFromIndex(string.startIndex.advancedBy(1))
}
Rob Keniger
sumber
Apakah ada cara untuk menggunakan metode yang sama ini, tetapi bukannya hasPrefix:@"word"Anda memeriksa beberapa nilai yang disimpan dalam suatu NSArray? Sebagai contoh: NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];?
adamdehaven
^^ Lihat pertanyaan saya di sini: stackoverflow.com/questions/18019660/…
adamdehaven
Jawaban bagus! Terima kasih @Rob Keniger
Ganesh Guturi
1
CFStringHasPrefix () juga dapat digunakan di NSStrings karena "Toll Free Bridging". Kinerja CFStringHasPrefix () tampaknya 2-3 kali lebih baik (setidaknya saat menggunakan kumpulan data saya). Jadi jika Anda menggunakannya di area sensitif kinerja, Anda mungkin ingin mencoba CFStringHasPrefix () sebagai gantinya.
John Bowers
12

Kamu bisa memakai:

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}
Chris Long
sumber
3
Anda tidak dapat mengirim pesan ke unichars, dan mereka mungkin tidak akan sama dengan NSStrings.
Chuck
8

hasPrefix berfungsi dengan baik. misalnya jika Anda sedang mencari url http di NSString, Anda akan menggunakan componentsSeparatedByStringuntuk membuat NSArraydan beralih menggunakan array hasPrefixuntuk menemukan elemen yang dimulai dengan http.

NSArray *allStringsArray = 
   [myStringThatHasHttpUrls componentsSeparatedByString:@" "]

for (id myArrayElement in allStringsArray) {
    NSString *theString = [myArrayElement description];
    if ([theString hasPrefix:@"http"]) {
        NSLog(@"The URL  is %@", [myArrayElement description]);
    }

}

hasPrefix mengembalikan nilai Boolean yang menunjukkan apakah string yang diberikan cocok dengan karakter awal penerima.

- (BOOL)hasPrefix:(NSString *)aString, 

parameter aStringadalah string yang Anda cari Nilai Pengembalian adalah YA jika aString cocok dengan karakter awal penerima, sebaliknya TIDAK. Mengembalikan TIDAK jika aStringkosong.

Iggy
sumber
4
NSString *stringWithoutAsterisk(NSString *string) {
    NSRange asterisk = [string rangeOfString:@"*"];
    return asterisk.location == 0 ? [string substringFromIndex:1] : string;
}
Membuang
sumber
4

Pendekatan lain untuk melakukannya ..

Semoga itu membantu seseorang ...

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}
Zar E Ahmer
sumber
3

Sebagai jawaban yang lebih umum, coba gunakan metode hasPrefix. Sebagai contoh, kode di bawah ini memeriksa untuk melihat apakah sebuah string dimulai dengan 10, yang merupakan kode kesalahan yang digunakan untuk mengidentifikasi masalah tertentu.

NSString* myString = @"10:Username taken";

if([myString hasPrefix:@"10"]) {
      //display more elegant error message
}
Kyle Clegg
sumber
0

Sedikit kode yang bagus ini saya temukan secara kebetulan, dan saya belum melihatnya disarankan di Stack. Ini hanya berfungsi jika karakter yang ingin Anda hapus atau ubah ada, yang nyaman dalam banyak skenario. Jika karakter tidak ada, itu tidak akan mengubah NSString Anda:

NSString = [yourString stringByReplacingOccurrencesOfString:@"YOUR CHARACTERS YOU WANT TO REMOVE" withString:@"CAN either be EMPTY or WITH TEXT REPLACEMENT"];

Ini adalah bagaimana saya menggunakannya:

//declare what to look for
NSString * suffixTorRemove = @"</p>";
NSString * prefixToRemove = @"<p>";
NSString * randomCharacter = @"</strong>";
NSString * moreRandom = @"<strong>";
NSString * makeAndSign = @"&";

//I AM INSERTING A VALUE FROM A DATABASE AND HAVE ASSIGNED IT TO returnStr
returnStr = [returnStr stringByReplacingOccurrencesOfString:suffixTorRemove withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:prefixToRemove withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:randomCharacter withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:moreRandom withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:makeAndSign withString:@"&"];

//check the output
NSLog(@"returnStr IS NOW: %@", returnStr);

Baris ini sangat mudah untuk melakukan tiga tindakan dalam satu:

  1. Periksa string Anda untuk karakter yang tidak Anda inginkan
  2. Dapat menggantinya dengan apa pun yang Anda suka
  3. Tidak memengaruhi kode di sekitarnya
App Dev Guy
sumber
0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Vaibhav Shiledar
sumber