Como verificar se o NSString começa com um determinado caractere

210

Como você verifica se um NSString começa com um determinado caractere (o caractere *).

O * é um indicador para o tipo de célula, então eu preciso do conteúdo desse NSString sem o *, mas preciso saber se o * existe.

Xetius
fonte

Respostas:

453

Você pode usar o -hasPrefix:método de NSString:

Objetivo-C:

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

Rápido:

var output:String?
if string.hasPrefix("*") {
    output = string.substringFromIndex(string.startIndex.advancedBy(1))
}
Rob Keniger
fonte
Existe uma maneira de usar esse mesmo método, mas em vez de hasPrefix:@"word"você verificar vários valores armazenados em um NSArray? Por exemplo NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];:?
precisa saber é o seguinte
^^ Veja minha pergunta aqui: stackoverflow.com/questions/18019660/…
adamdehaven
Boa resposta! Obrigado @Rob Keniger
Ganesh Guturi
1
CFStringHasPrefix () também pode ser usado no NSStrings devido a "Toll Free Bridging". O desempenho de CFStringHasPrefix () parece ser 2-3 vezes melhor (pelo menos ao usar meu conjunto de dados). Portanto, se você o estiver usando em uma área sensível ao desempenho, convém tentar o CFStringHasPrefix ().
John Bowers
12

Você pode usar:

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}
Chris Long
fonte
3
Você não pode enviar mensagens para unichars, e elas provavelmente não serão iguais a NSStrings.
Chuck
8

O hasPrefix funciona especialmente bem. por exemplo, se você estivesse procurando um URL http em a NSString, usaria componentsSeparatedByStringpara criar um NSArraye iterar a matriz usando hasPrefixpara encontrar os elementos que começam com 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 retorna um valor booleano que indica se uma determinada sequência corresponde aos caracteres iniciais do receptor.

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

parâmetro aStringé uma sequência que você está procurando Valor de retorno é SIM se aString corresponder aos caracteres iniciais do receptor, caso contrário NÃO. Retorna NO se aStringestiver vazio.

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

Outra abordagem para fazê-lo ..

Que ajude alguém ...

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}
Zar E Ahmer
fonte
3

Como resposta mais geral, tente usar o método hasPrefix. Por exemplo, o código abaixo verifica se uma sequência começa com 10, que é o código de erro usado para identificar um determinado problema.

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

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

Este pequeno pedaço de código que encontrei por acaso e ainda o tenho visto sugerido no Stack. Só funciona se os caracteres que você deseja remover ou alterar existirem, o que é conveniente em muitos cenários. Se o (s) caractere (s) não existir, ele não alterará seu NSString:

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

É assim que eu uso:

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

Essa linha é super fácil de executar três ações em uma:

  1. Verifica sua string quanto aos caracteres que você não deseja
  2. Pode substituí-los com o que quiser
  3. Não afeta o código circundante
App Dev Guy
fonte
0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Vaibhav Shiledar
fonte