2009-08-15 6 views
9

Кто-нибудь знает простой способ добавить одну обратную косую черту (\) в NSString в Objective-C? Я пытаюсь иметь NSString *temp = @"\/Date(100034234)\/";NSString @ "" Добавление символа обратной косой черты-c

Я могу получить двойную обратную косую черту или без обратной косой черты, но не могу получить обратную косую черту. Любая помощь будет оценена по достоинству. Благодаря

ответ

17

Строка @"\\" является одной обратной косой черты, @"\\\\" является двойной обратный слэш

+1

Уверены ли вы в этом? Когда я печатаю NSString, используя NSLog, он отображается как двойная обратная косая черта. – 2009-08-15 04:54:25

+6

Использование NSLog (строка) - это плохая практика; все, что нужно сделать для разбивки вашей системы, это передать, например, % d, и это будет интерпретироваться как разыменование для значения. Если вы хотите распечатать значение NSString самостоятельно, вы должны использовать: NSLog (@ "@%", строка) , с тех пор никакие значения в строке не влияют на итоговый результат, который это тип объекта. – AlBlue

3

Это ошибка в NSLog. Я нашел архив списков рассылки с сообщением, опубликованным в 2002 году тем, кто подал ошибку для этого here. Человек также сказал следующее:

Ничего не сделано, насколько я могу судить. Я не понимаю, как они это сделали, но экранирование действительно работает для строки, а не для NSLog.

Поэтому я думаю, вам придётся придумать собственную реализацию сообщения журнала, если вы действительно хотите обратную косую черту.

+0

Есть ли другой способ убедиться в этом? Кроме того, знаете ли вы какой-либо другой способ представления единственного символа обратной косой черты и добавьте его в строку? – 2009-08-15 05:19:45

+0

Можете ли вы сделать что-то вроде 'NSString * string = @" \\ "; NSLog (@ "% @", строка); ' – Tim

+0

Нет ничего плохого в NSLog. Это его строка, содержащая четыре обратных косых черты, вероятно, помещенные там некоторым кодом, который заменяет одну обратную косую черту на два. Когда он печатает их, он выглядит как 2, потому что их четыре. –

6

Строки и NSLog работают отлично для меня (iPhone SDK 3.1.2 и Xcode 3.2.1):

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

См this answer.

3

Этот код делает дает требуемый результат:

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

Однако у меня была проблема с моим JSON инструментария (SBJSON), который заменил все occurrances из "\\" с "\\\\", что вызывало проблемы, описанные в других ответах и ​​комментариях.

В результате была строка выглядит как:

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

Смотрите мой ответ here

Раствор с помощью:

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

О, так что экраны не оцениваются во время компиляции? интересно ... –

+0

До сих пор я все еще ожидаю, что все будет работать нормально. Мне еще предстоит увидеть нерабочий пример, который сам не глючит. – Eiko

+0

Бен. Для предопределенных строк они должны быть (это имело бы смысл). Но во многих случаях, когда возникают эти вопросы, они не предназначены для использования только для предопределенных строк. Это было давно, поэтому мои воспоминания смутные, но я думаю, что в моем случае запущенные строки данных, неизвестные во время компиляции через JSON, испортили результаты. –

1

Где вы хотите \ добавить или удалить. просто \\ в этом месте.

Смежные вопросы