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

210

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

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

Xetius
источник

Ответы:

453

Вы можете использовать -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))
}
Роб Кенигер
источник
Есть ли способ использовать этот же метод, но вместо hasPrefix:@"word"вас проверить несколько значений, хранящихся в NSArray? Например: NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];?
adamdehaven
^^ См. Мой вопрос здесь: stackoverflow.com/questions/18019660/…
adamdehaven
Хороший ответ! Спасибо @Rob Кенигер
Ганеш Гутури
1
CFStringHasPrefix () также может использоваться на NSStrings из-за «Toll Free Bridging». Производительность CFStringHasPrefix () кажется в 2-3 раза лучше (по крайней мере, при использовании моего набора данных). Поэтому, если вы используете его в чувствительной к производительности области, вы можете попробовать CFStringHasPrefix () вместо этого.
Джон Бауэрс
12

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

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}
Крис Лонг
источник
3
Вы не можете отправлять сообщения на unichars, и они, вероятно, не будут равны NSStrings.
Чак
8

hasPrefix работает особенно хорошо. например, если вы искали URL-адрес http в a 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. Возвращает НЕТ, если aStringпусто.

Iggy
источник
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
}
Zar E Ahmer
источник
3

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

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

if([myString hasPrefix:@"10"]) {
      //display more elegant error message
}
Кайл Клегг
источник
0

Этот небольшой кусочек кода я нашел случайно, и мне еще предстоит увидеть его в стеке. Это работает, только если символы, которые вы хотите удалить или изменить, существуют, что удобно во многих сценариях. Если символ (ы) не существует, это не изменит вашу строку 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. Не влияет на окружающий код
App Dev Guy
источник
0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Вайбхав Шиледар
источник