Cómo verificar si NSString comienza con un cierto carácter

210

¿Cómo se verifica si un NSString comienza con un determinado carácter (el carácter *).

El * es un indicador del tipo de celda, por lo que necesito el contenido de esta NSString sin el *, pero necesito saber si existe el *.

Xetius
fuente

Respuestas:

453

Puedes usar el -hasPrefix:método de NSString:

C objetivo:

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
fuente
¿Hay alguna manera de usar este mismo método, pero en lugar de hasPrefix:@"word"verificar múltiples valores almacenados en un NSArray? Por ejemplo NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];:?
adamdehaven
^^ Vea mi pregunta aquí: stackoverflow.com/questions/18019660/…
adamdehaven
¡Buena respuesta! Gracias @Rob Keniger
Ganesh Guturi
1
CFStringHasPrefix () también se puede usar en NSStrings debido a "Puente gratuito". El rendimiento de CFStringHasPrefix () parece ser 2-3 veces mejor (al menos cuando uso mi conjunto de datos). Entonces, si lo está utilizando en un área sensible al rendimiento, es posible que desee probar CFStringHasPrefix () en su lugar.
John Bowers
12

Puedes usar:

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}
Chris Long
fuente
3
No puede enviar mensajes a unichars, y probablemente no serán iguales a NSStrings.
Chuck
8

hasPrefix funciona especialmente bien. por ejemplo, si estaba buscando una url http en a NSString, la usaría componentsSeparatedByStringpara crear una NSArraye iterar la matriz usando hasPrefixpara encontrar los elementos que comienzan con 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 devuelve un valor booleano que indica si una cadena dada coincide con los caracteres iniciales del receptor.

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

El parámetro aStringes una cadena que está buscando. El valor de retorno es SÍ si aString coincide con los caracteres iniciales del receptor; de lo contrario, NO. Devuelve NO si aStringestá vacío.

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

Otro enfoque para hacerlo ...

Que pueda ayudar a alguien ...

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

Como respuesta más general, intente usar el método hasPrefix. Por ejemplo, el siguiente código verifica si una cadena comienza con 10, que es el código de error utilizado para identificar un determinado problema.

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

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

Este pequeño código que encontré por casualidad, y aún no lo he visto sugerido en Stack. Solo funciona si los caracteres que desea eliminar o modificar existen, lo cual es conveniente en muchos escenarios. Si los caracteres no existen, no alterará su NSString:

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

Así es como lo 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);

Esta línea es muy fácil de realizar tres acciones en una:

  1. Comprueba su cadena para los caracteres que no desea
  2. Puede reemplazarlos con lo que quieras
  3. No afecta el código circundante
App Dev Guy
fuente
0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Vaibhav Shiledar
fuente