NSString'in belirli bir karakterle başlayıp başlamadığını kontrol etme


210

Bir NSString'in belirli bir karakterle (* karakteri) başlayıp başlamadığını nasıl kontrol edersiniz?

* Hücre türü için bir göstergedir, bu yüzden bu NSString içeriği * olmadan gerekir, ancak * olup olmadığını bilmek gerekir.

Yanıtlar:


453

Şu -hasPrefix:yöntemi kullanabilirsiniz NSString:

Objective-C:

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

Swift:

var output:String?
if string.hasPrefix("*") {
    output = string.substringFromIndex(string.startIndex.advancedBy(1))
}

Aynı yöntemi kullanmanın bir yolu var, ancak bunun yerine hasPrefix:@"word"bir NSArray. Örneğin: NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];?
adamdehaven


Güzel cevap! @Rob Keniger
Ganesh Guturi

1
CFStringHasPrefix (), "Ücretsiz Köprü Oluşturma" nedeniyle NSStrings'te de kullanılabilir. CFStringHasPrefix () 'in performansı 2-3 kat daha iyi görünüyor (en azından veri setimi kullanırken). Performansa duyarlı bir alanda kullanıyorsanız, bunun yerine CFStringHasPrefix () 'i denemek isteyebilirsiniz.
John Bowers

12

Kullanabilirsiniz:

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}

3
Unichars'a mesaj gönderemezsiniz ve muhtemelen NSStrings'e eşit olmazlar.
Chuck

8

hasPrefix özellikle iyi çalışıyor. örneğin bir bir http url aradığını eğer NSStringistersek componentsSeparatedByStringbir yaratmak NSArrayve tekrarlayın kullanarak dizi hasPrefixhttp ile başlayan elemanları bulmak için.

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

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

}

hasPrefix belirli bir dizenin alıcının başlangıç ​​karakterleriyle eşleşip eşleşmediğini gösteren bir Boolean değeri döndürür.

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

parametre aStringEğer Dönüş Değeri aradığınız aksi HAYIR, aString alıcısının başlayan karakterleri eşleşirse EVET olduğu bir dizedir. Boşsa NO değerini döndürür aString.



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

4

Bunu yapmak için başka bir yaklaşım ..

Birine yardımcı olsun ...

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}

3

Daha genel bir cevap olarak hasPrefix yöntemini kullanmayı deneyin. Örneğin, aşağıdaki kod, bir dizenin 10 ile başlayıp başlamadığını kontrol eder; bu, belirli bir sorunu tanımlamak için kullanılan hata kodudur.

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

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


0

Bu güzel küçük kod şans eseri buldum ve henüz Stack üzerinde önerilen görmek için var. Yalnızca kaldırmak veya değiştirmek istediğiniz karakterler varsa çalışır, bu da birçok senaryoda uygundur. Karakterler yoksa, NSString'inizi değiştirmez:

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

Ben nasıl kullanacağım:

//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);

Bu bir satır, üç eylemi bir arada gerçekleştirmek için çok kolaydır:

  1. Dizenizi istemediğiniz karakterler için kontrol eder
  2. Onları istediğiniz gibi değiştirebilir
  3. Çevredeki kodu etkilemez

0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.