Как проверить, начинается ли NSString с определенного символа

Как вы проверяете, начинается ли NSString с определенного символа (символ *).

* - индикатор типа ячейки, поэтому мне нужно содержимое этого NSString без *, но нужно знать, существует ли *.

Ответ 1

Вы можете использовать метод -hasPrefix: 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))
}

Ответ 2

Вы можете использовать:

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

Ответ 3

hasPrefix работает особенно хорошо. например, если вы искали http-url в 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 - это строка, которую вы ищете Возвращаемое значение - YES, если aString соответствует начальным символам приемника, в противном случае NO. Возвращает NO, если aString пуст.

Ответ 4

Используйте characterAtIndex:. Если первый символ является звездочкой, используйте substringFromIndex:, чтобы получить строку sans '*'.

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

Другой подход для этого.

Помогите кому-нибудь...

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

Ответ 9

Этот приятный маленький код, который я нашел случайно, и я еще не видел его предложенным на 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);

Эта одна строка очень проста для выполнения трех действий в одном:

  • Проверяет вашу строку для символов, которые вы не хотите.
  • Может заменить их тем, что вам нравится
  • Не влияет на окружающий код

Ответ 10

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