2009-08-31 10 views
21

He intentado esto¿Número de caracteres en NSString o NSMutableString?

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString: myString]; 
[myCharSet count]; 

Pero una advertencia de que NSCharacterSet puede no responder a contar. Esto es para aplicaciones de escritorio y no para iPhone, que creo que funciona con el código anterior.

+0

Para aclarar: ¿desea el número de caracteres únicos en la cadena? –

+0

No, solo el número total de caracteres. – 4thSpace

Respuesta

76

que podría estar perdiendo algo, pero ¿qué tiene de malo simplemente haciendo:

NSUInteger characterCount = [myString length]; 

para obtener sólo el número de caracteres de una cadena, no veo ninguna razón para perder el tiempo con NSCharacterSet.

+14

Solo para ser claro, '-length' devuelve' la cantidad de caracteres Unicode en el receptor' (tal como se define en la documentación 'NSString'). Técnicamente, la documentación es incorrecta porque en realidad devuelve 'el número de unidades de código UTF-16' y no' la cantidad de caracteres Unicode'. Esta distinción no es importante para la gran mayoría de los programadores y usos, pero sí tiene importantes consecuencias. Por ejemplo, '[@" \ U0010ffff "length]' devuelve '2' aunque contenga un único carácter Unicode. 'characterAtIndex:' para '0' y' 1' devuelve '0xdbff' y' 0xdfff', respectivamente. – johne

+8

^Esto es INCREÍBLEMENTE importante porque ahora la mayoría de los usuarios de iOS escriben con emojis que se considerarán 2 caracteres usando el método 'length' mencionado anteriormente ... aunque sea 1 caracter. –

+0

esto podría ser más importante de lo que esperaría si usa CoreData, romper el par sustituto como "" no pasaría la regla de validación de CoreData durante la fase de confirmación, CoreData muestra suavemente el código de error de 1671, que ni siquiera google doesn No sé nada al respecto, lo que me llevó medio año descubrir qué está pasando realmente :( – peak

0

Eso tampoco debería funcionar en el iPhone, ya que NSCharacterSet no es una subclase de NSSet en ninguna de las plataformas.

Si realmente necesita obtener un recuento de por qué no la subclase NSSet, agregue el valor, luego, tenga un método que lo devuelva como un NSCharacterSet bajo demanda para usar en cualquier cosa que necesite un conjunto de caracteres?

+0

NSSet es un clúster de clase y, por lo tanto, no se subclasifica fácilmente (o prácticamente). –

+0

¿No hay una técnica simple para obtener un recuento de todos los caracteres dentro de una cadena? – 4thSpace

+1

Sí, hay uno (longitud real): [myString lengthOfBytesUsingEncoding: NSUTF32StringEncoding]/4; – Stephane

Cuestiones relacionadas