2010-10-01 25 views
61

Quiero obtener un personaje de algún lugar dentro de un NSString. Quiero que el resultado sea un NSString. noCómo obtener un solo carácter NSString de un NSString

[[s substringToIndex:i] substringToIndex:1] 

es una mejor manera de hacerlo:

Este es el código que utilizo para obtener un solo carácter en el índice que?

+1

¿Quieres recuperar el carácter, o quitarla? O recuperarlo y eliminarlo? –

+0

Solo quiero obtener el personaje. –

Respuesta

124

Esto también recuperará un carácter en el índice i como un NSString, y solo está utilizando una estructura NSRange en lugar de un NSString adicional.

NSString * newString = [s substringWithRange:NSMakeRange(i, 1)]; 
+5

Asegúrese de revisar la respuesta de Nadie en particular a continuación. Mi solución devolverá basura para una gran cantidad de caracteres Unicode. –

+1

La respuesta no cuenta la historia completa. NSString se vuelve complicado cuando manejas emoji, tonos de piel, marcas diacríticas y caracteres CJK. https://www.objc.io/issues/9-strings/unicode/ revela más detalles de NSString raro. –

23

Su sugerencia solo funciona para caracteres simples como ASCII. NSStrings almacena unicode y si tu personaje es unichars largo, entonces podrías terminar con un galimatías. Utilice

- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index; 

si quiere determinar cuántos unichars es su personaje. Uso esto para recorrer mis cadenas y determinar dónde se encuentran los bordes de los caracteres.

Ser totalmente unicodecable es un poco de trabajo, pero depende de los idiomas que utilice. Veo una gran cantidad de texto asiático, así que la mayoría de los personajes se extienden desde un espacio, por lo que es el trabajo lo que tengo que hacer.

+0

La página de documentación para este método tiene un fragmento de código útil para ajustar cualquier rango para iniciar y detener en los límites de Unicode. http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html – JeremyP

+0

La preocupación de "nadie en particular" es válida, pero la información que se brinda aquí es inexacta y confuso NSStrings se basan en unidades UTF-16, un esquema de codificación de 2 bytes, y la longitud, el índice y el rango de la cadena se expresan en dichas unidades. Las unidades UTF-16 individuales cubren la gran mayoría de los caracteres en los idiomas modernos, incluido el este de Asia, y es mucho más grande que ASCII. De hecho, hay puntos de código que deben representarse como un par de unidades UTF-16 (caracteres compuestos), como caracteres de algunos idiomas antiguos o ciertos caracteres con acentos. Cuando se trata de estos, el consejo de NOIP ayuda. – CodePlumber

+0

¿UTF-16 cubre todos los caracteres chinos? –

32

Si solo desea obtener un carácter de un NSString, puede intentarlo.

- (unichar)characterAtIndex:(NSUInteger)index; 

usados ​​de esta manera:

NSString *originalString = @"hello"; 
int index = 2; 
NSString *theCharacter = [NSString stringWithFormat:@"%c", [originalString characterAtIndex:index-1]]; 
//returns "e". 
+3

Esto es exactamente lo que necesitaba, gracias – Pavan

0
NSMutableString *myString=[NSMutableString stringWithFormat:@"Malayalam"]; 
NSMutableString *[email protected]""; 

for (int i=0; i<myString.length; i++) { 
    revString=[NSMutableString stringWithFormat:@"%c%@",[myString characterAtIndex:i],revString]; 
} 
NSLog(@"%@",revString); 
Cuestiones relacionadas