Come verificare se NSString inizia con un determinato carattere


210

Come si controlla se una NSString inizia con un certo carattere (il carattere *).

* È un indicatore per il tipo di cella, quindi ho bisogno del contenuto di questo NSString senza *, ma devo sapere se esiste *.

Risposte:


453

Puoi usare il -hasPrefix:metodo di 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))
}

C'è un modo per usare questo stesso metodo, ma invece di hasPrefix:@"word"controllare più valori memorizzati in un NSArray? Ad esempio NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];:?
Adamdehaven,


Bella risposta! Grazie @Rob Keniger
Ganesh Guturi

1
CFStringHasPrefix () può essere utilizzato anche su NSStrings grazie a "Toll Free Bridging". Le prestazioni di CFStringHasPrefix () sembrano essere 2-3 volte migliori (almeno quando si utilizza il mio set di dati). Quindi, se lo si utilizza in un'area sensibile alle prestazioni, è possibile provare CFStringHasPrefix ().
John Bowers,

12

Puoi usare:

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

3
Non è possibile inviare messaggi a unichars e probabilmente non saranno uguali a NSStrings.
Chuck,

8

hasPrefix funziona particolarmente bene. ad esempio, se stavi cercando un URL http in a NSString, utilizzeresti componentsSeparatedByStringper creare NSArraye iterare l'array usando hasPrefixper trovare gli elementi che iniziano 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 restituisce un valore booleano che indica se una determinata stringa corrisponde ai caratteri iniziali del destinatario.

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

Il parametro aStringè una stringa che stai cercando Il valore restituito è SÌ se aString corrisponde ai caratteri iniziali del destinatario, altrimenti NO. Restituisce NO se aStringè vuoto.



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

4

Un altro approccio per farlo ..

Possa aiutare qualcuno ...

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

3

Come risposta più generale, prova a utilizzare il metodo hasPrefix. Ad esempio, il codice seguente controlla se una stringa inizia con 10, che è il codice di errore utilizzato per identificare un determinato problema.

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

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


0

Questo bel po 'di codice l'ho trovato per caso, e devo ancora vederlo suggerito su Stack. Funziona solo se esistono i caratteri che desideri rimuovere o modificare, il che è conveniente in molti scenari. Se il / i personaggio / i non esiste / i, non cambierà la tua NSString:

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

Ecco come 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);

Questa linea è semplicissima per eseguire tre azioni in una:

  1. Controlla la stringa per il carattere / i che non si desidera
  2. Può sostituirli con quello che ti piace
  3. Non influisce sul codice circostante

0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.