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 *.

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))
}

¿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


¡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];
}

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.



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

4

Otro enfoque para hacerlo ...

Que pueda ayudar a alguien ...

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

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
}


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

0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.