2010-03-23 40 views

Respuesta

421

Usted puede utilizar el método de -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)) 
} 
+4

¡Maravilloso! ¡Gracias! – mbm29414

+0

¿Hay alguna manera de utilizar este mismo método, pero en lugar de 'hasPrefix: @ '' 'palabra' ', comprueba los valores múltiples almacenados en' 'NSArray'' Por ejemplo: 'NSArray * words = [NSArray arrayWithObjects: @" foo ", @" bar ", @" baz ", nil];'? – adamdehaven

+0

^^ Vea mi pregunta aquí: http://stackoverflow.com/questions/18019660/check-if-nsstring-hasprefix-that-is-contained-in-nsarray – adamdehaven

12

Se puede utilizar:

NSString *newString; 
if ([[myString characterAtIndex:0] isEqualToString:@"*"]) { 
    newString = [myString substringFromIndex:1]; 
} 
+3

No puede enviar mensajes a unichars, y probablemente no será igual a NSStrings. – Chuck

+0

Buen punto. Editado ... –

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

hasPrefix funciona especialmente bien. por ejemplo, si buscara una url http en NSString, usaría componentsSeparatedByString para crear un NSArray y repetir la matriz usando hasPrefix para 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, 

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

3

Como respuesta más general, intente utilizar el método hasPrefix. Por ejemplo, el código siguiente comprueba 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 
} 
3

Otro enfoque para hacerlo ..

Puede que ayudar a alguien ...

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

Este pequeño trozo de código que se encuentran por casualidad, y todavía tener verlo sugerido en Stack. Solo funciona si existen los caracteres que desea eliminar o modificar, lo cual es conveniente en muchos escenarios.Si/s no existe el carácter, no va a alterar su NSString:

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

Ésta es la forma en que 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); 

Ésta línea es muy fácil de llevar a cabo tres acciones en un solo :

  1. comprueba su cadena para el personaje/s que no quiere
  2. puede las reemplaza con lo que quiera
  3. No afecta rodea código
0
NSString* expectedString = nil; 
if([givenString hasPrefix:@"*"]) 
{ 
    expectedString = [givenString substringFromIndex:1]; 
} 
Cuestiones relacionadas