2009-08-15 7 views
9

¿Alguien sabe de una manera fácil de agregar una barra diagonal inversa (\) a NSString en Objective-C? Estoy tratando de tener un NSString *temp = @"\/Date(100034234)\/";NSString @ "" agregar carácter de barra diagonal inversa-c

Puedo obtener una barra diagonal inversa doble o ninguna diagonal inversa, pero no puedo obtener una sola barra diagonal inversa. Cualquier ayuda sería apreciada. Gracias

Respuesta

17

La cadena @"\\" es una sola barra invertida, @"\\\\" es una doble barra invertida

+1

¿Estás seguro? Cuando imprimo NSString usando NSLog, aparece como una barra invertida doble. –

+6

Usar NSLog (cadena) es una mala práctica; todo lo que alguien debe hacer para bloquear su sistema es pasar, p. ej. % d, y se interpretará como una desreferencia por un valor. Si desea imprimir el valor de un NSString por sí mismo, entonces debe usar: NSLog (@ "@%", cadena) dado que ningún valor en la 'cadena' afectará la salida resultante, que es un tipo de objeto. – AlBlue

3

Esto es un error en NSLog. Encontré un archivo de la lista de correo con un mensaje fechado en 2002 de alguien que archivó un error para este here. La persona también dijo esto:

No se ha hecho nada por lo que yo sé. No entiendo cómo lo han hecho , pero el escape funciona para la cadena, pero no para NSLog.

Así que supongo que tendrás que crear tu propia implementación de un mensaje de registro si realmente quieres barras diagonales inversas.

+0

¿Hay alguna otra forma de estar seguro de esto? Además, ¿conoce alguna otra forma de representar un solo carácter de barra invertida literal y anexarlo a una cadena? –

+0

¿Puedes hacer algo como 'NSString * string = @" \\ "; NSLog (@ "% @", cadena); ' – Tim

+0

No hay nada de malo en NSLog. Es su cadena que contiene cuatro barras diagonales inversas, probablemente colocadas allí por algún código que reemplaza una barra invertida por dos. Cuando los imprime se ve como 2, porque hay cuatro. –

6

Las cuerdas y NSLog están trabajando muy bien para mí (iPhone SDK 3.1.2 y Xcode 3.2.1):

NSLog(@"\\"); // output is one backslash 
NSLog(@"\\\\"); // output is two backslashes 
NSLog(@"\\/Date(100034234)\\/"); // output is \/Date(100034234)\/ 

Ver this answer.

3

Este código qué dar la salida solicitada:

NSString *temp = @"\\/Date(100034234)\\/"; 
NSLog(@"%@",temp); 

Sin embargo tuve un problema con mi kit de herramientas JSON (SBJSON) que reemplazó todas las ocurrencias de "\\" con "\\\\", que causó problemas como se describe en las otras respuestas y los comentarios.

El resultado fue una cadena que parece:

@"\\\\/Date(100034234)\\\\/" 

Ver mi respuesta here

La solución estaba usando:

temp = [temp stringByReplacingOccurancesOfString:@"\\\\" withString:@"\\"]; 
+0

Ah, ¿entonces las escapes no se evalúan en tiempo de compilación? interesante ... –

+0

Hasta ahora, todavía espero que todo funcione bien. Todavía tengo que ver un ejemplo que no funciona y que no tiene errores. – Eiko

+0

Ben - Para cadenas predefinidas, deberían ser (tendría sentido). Pero en muchos casos, cuando se producen estas preguntas, no están destinadas a ser utilizadas solo para cadenas predefinidas. Esto fue hace mucho tiempo, así que mis recuerdos son vagos, pero supongo que en mi caso, ejecutar cadenas de datos desconocidas en tiempo de compilación a través de JSON arruinó los resultados. –

1

Dónde quiere un \ añadir o eliminar. simplemente \\ en ese lugar.

Cuestiones relacionadas