In Xcode, se ho un numero NSString
contenente un numero, cioè @ "12345", come lo divido in una matrice che rappresenta le parti componenti, ad esempio "1", "2", "3", "4", " 5" ... c'è un componentsSeparatedByString
sull'oggetto NSString
, ma in questo caso non v'è alcun delimitatore ...Come si divide NSString in componenti?
risposta
può sembrare characterAtIndex:
farebbe il trucco, ma che restituisce un unichar
, che non è un Tipo di dati derivato da NSO e quindi non può essere inserito direttamente in un array. Dovresti costruire una nuova stringa con ogni unichar.
Una soluzione più semplice è utilizzare substringWithRange:
con intervalli di 1 carattere. Esegui la stringa attraverso un semplice ciclo for (int i=0;i<[myString length];i++)
per aggiungere ciascun intervallo di 1 carattere a un NSMutableArray
.
A NSString
già è un array di componenti, se per componenti si intendono singoli caratteri. Utilizzare [string length]
per ottenere la lunghezza della stringa e [string characterAtIndex:]
per ottenere i caratteri.
Se è veramente necessario disporre di una matrice di oggetti stringa con un solo carattere, sarà necessario creare tale array autonomamente. Passa sopra i caratteri nella stringa con un ciclo for
, crea una nuova stringa con un singolo carattere utilizzando [NSString stringWithFormat:]
e aggiungila all'array. Ma questo di solito non è necessario.
Non so se questo funziona per ciò che si vuole fare, ma:
const char *foo = [myString UTF8String]
char third_character = foo[2];
Assicurarsi di leggere la documentazione sul UTF8String
Nel tuo caso, dal momento che non si ha delimitatore, devi per ottenere caratteri separati da
- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange
o questa
- (unichar)characterAtIndex:(NSUInteger) index inside a loop.
Che l'unico modo che vedo, al momento.
C'è una funzione di membro di pronto NSString per farlo:
NSString* foo = @"safgafsfhsdhdfs/gfdgdsgsdg/gdfsgsdgsd";
NSArray* stringComponents = [foo componentsSeparatedByString:@"/"];
che ha funzionato brillantemente, grazie mille per la risposta rapida :-) –