Как проверить, начинается ли NSString с определенного символа - PullRequest
206 голосов
/ 23 марта 2010

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

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

Ответы [ 10 ]

445 голосов
/ 24 марта 2010

Вы можете использовать -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))
}
12 голосов
/ 23 марта 2010

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

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}
8 голосов
/ 02 февраля 2011

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

4 голосов
/ 10 ноября 2014

Еще один подход к этому ..

Пусть это кому-нибудь поможет ...

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}
4 голосов
/ 23 марта 2010
NSString *stringWithoutAsterisk(NSString *string) {
    NSRange asterisk = [string rangeOfString:@"*"];
    return asterisk.location == 0 ? [string substringFromIndex:1] : string;
}
4 голосов
/ 23 марта 2010

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

3 голосов
/ 06 августа 2012

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

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

if([myString hasPrefix:@"10"]) {
      //display more elegant error message
}
1 голос
/ 23 марта 2010

Это может помочь? :)

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/characterAtIndex:

Просто найдите символ по индексу 0 и сравните его со значением, которое вы ищете!

0 голосов
/ 06 июля 2016
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
0 голосов
/ 09 апреля 2015

Этот небольшой кусочек кода я обнаружил случайно, и мне еще предстоит увидеть его в стеке. Это работает, только если символы, которые вы хотите удалить или изменить, существуют, что удобно во многих сценариях. Если символ (ы) не существует, это не изменит вашу строку 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. Не влияет на окружающий код
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...