Як перевірити, чи починається NSString з певного символу


210

Як перевірити, чи починається NSString з певного символу (символу *).

* - це показник для типу комірки, тому мені потрібен вміст цього NSString без *, але потрібно знати, чи існує *.

Відповіді:


453

Можна використовувати -hasPrefix:метод NSString:

Завдання-C:

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

Швидкий:

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

Чи є спосіб скористатися цим самим методом, але замість того, hasPrefix:@"word"щоб перевірити наявність кількох значень, збережених у NSArray? Наприклад: NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];?
adamdehaven

^^ Дивіться моє запитання тут: stackoverflow.com/questions/18019660 / ...
adamdehaven

Гарна відповідь! Дякую @Rob Keniger
Ганеш Гутурі

1
CFStringHasPrefix () також може використовуватися на NSStrings завдяки "Безкоштовному мосту". Ефективність CFStringHasPrefix () здається в 2-3 рази кращою (принаймні при використанні мого набору даних). Отже, якщо ви використовуєте його у зоні, залежної від продуктивності, ви можете замість цього спробувати CFStringHasPrefix ().
Джон Боуерс

12

Ви можете використовувати:

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

3
Ви не можете надсилати повідомлення однолюдкам, і вони, ймовірно, не дорівнюватимуть NSStrings.
Чак

8

Особливо добре працює hasPrefix . наприклад, якщо ви шукали URL-адресу http у NSString, ви б використовувалиcomponentsSeparatedByString для створення NSArrayмасиву і ітерації, використовуючи hasPrefixдля пошуку елементів, що починаються з 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 повертає булеве значення, яке вказує, чи відповідає дана рядок початковим символам приймача.

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

Параметр aString- це рядок, для якого ви шукаєте Return Value - ТАК, якщо aString відповідає початковим символам приймача, інакше НІ. Повертає НІ, якщо aStringпорожній.



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

4

Ще один підхід до цього ..

Нехай це допоможе комусь ...

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

3

Як більш загальну відповідь, спробуйте скористатися методом hasPrefix. Наприклад, наведений нижче код перевіряє, чи починається рядок з 10, що є кодом помилки, який використовується для ідентифікації певної проблеми.

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

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


0

Цей хороший маленький код я знайшов випадково, і я ще не бачив його, запропонованого в Stack. Він працює лише в тому випадку, якщо символи, які ви хочете видалити або змінити, існують, що зручно у багатьох сценаріях. Якщо символів / s не існує, це не змінить ваш NSString:

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

Ось як я його використовую:

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

Цей один рядок дуже просто виконати три дії в одній:

  1. Перевіряє рядок на предмет символів, які ви не хочете
  2. Може замінити їх на все, що завгодно
  3. Не впливає на оточуючий код

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.