2009-08-15 4 views
9

क्या कोई भी उद्देश्य-सी में NSString पर एक बैकस्लैश (\) जोड़ने का आसान तरीका जानता है? मैं NSString *temp = @"\/Date(100034234)\/" रखने की कोशिश कर रहा हूं;एनएसएसटींग @ "" बैकस्लैश चरित्र उद्देश्य-सी

मैं डबल बैकस्लैश या बैकस्लैश प्राप्त करने में सक्षम हूं, लेकिन एक बैकस्लैश प्राप्त करने में असमर्थ हूं। किसी भी सहायता की सराहना की जाएगी। धन्यवाद

उत्तर

17

स्ट्रिंग @"\\", एक भी बैकस्लैश है @"\\\\" एक डबल बैकस्लैश

+1

क्या आप इसके बारे में निश्चित हैं? जब मैं एनएसएलओजी का उपयोग करके एनएसएसटींग प्रिंट करता हूं तो यह डबल बैकस्लैश के रूप में दिखाई देता है। –

+6

NSLog (स्ट्रिंग) का उपयोग करना बुरा अभ्यास है; सभी को आपके सिस्टम को दुर्घटनाग्रस्त करने के लिए करना है उदा। % d, और इसे एक मान के लिए एक dereference के रूप में व्याख्या किया जाएगा। यदि आप अपने स्वयं के एनएसएसटींग के मूल्य को प्रिंट करना चाहते हैं, तो आपको इसका उपयोग करना चाहिए: एनएसएलओजी (@ "@%", स्ट्रिंग) तब से 'स्ट्रिंग' में कोई मान परिणामस्वरूप आउटपुट को प्रभावित नहीं करेगा, जो एक वस्तु प्रकार है। – AlBlue

3

है यह NSLog में एक बग है। मुझे 2002 में किसी संदेश के साथ एक मेलिंग सूची संग्रह मिला जिसने इस here के लिए एक बग दायर किया था। व्यक्ति ने यह भी कहा:

जहां तक ​​मैं कह सकता हूं कुछ भी नहीं किया गया है। मुझे समझ में नहीं आता कि उन्होंने इसे किया है, लेकिन भागने स्ट्रिंग के लिए काम करता है, सिर्फ NSLog के लिए नहीं।

तो मुझे लगता है कि यदि आप वास्तव में बैकस्लैश चाहते हैं तो आपको लॉग संदेश के अपने कार्यान्वयन के साथ आना होगा।

+0

क्या इस बारे में सुनिश्चित करने का कोई और तरीका है? साथ ही, क्या आप एक शाब्दिक बैकस्लैश चरित्र का प्रतिनिधित्व करने और इसे स्ट्रिंग में जोड़ने के किसी अन्य तरीके से जानते हैं? –

+0

क्या आप कुछ ऐसा कर सकते हैं जैसे 'एनएसएसटींग * स्ट्रिंग = @ "\\"; एनएसएलओजी (@ "% @", स्ट्रिंग); ' – Tim

+0

एनएसएलओजी के साथ कुछ भी गलत नहीं है। यह उसकी स्ट्रिंग है जिसमें चार बैकस्लाश होते हैं, शायद कुछ कोड द्वारा वहां रखा जाता है जो दो बैकस्लैश को दो के साथ बदल देता है। जब वह उन्हें प्रिंट करता है तो यह 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); 

हालांकि मुझे लगता है कि के साथ "\\\\" "\\" के सभी occurrances प्रतिस्थापित मेरी JSON टूलकिट (SBJSON) के साथ एक मुद्दा था, जिसने अन्य उत्तरों और टिप्पणियों में वर्णित मुद्दों का कारण बना दिया। देखें मेरा उत्तर here

समाधान का उपयोग किया गया था

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

:

परिणाम एक स्ट्रिंग की तरह लग रही थी

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

ओह, तो बचने के समय संकलित समय पर मूल्यांकन नहीं किया जाता है? दिलचस्प ... –

+0

अभी तक मैं अभी भी सब कुछ ठीक काम करने की उम्मीद करता हूं। मुझे अभी तक एक गैर-कामकाजी उदाहरण देखना है जो खुद ही छोटी नहीं है। – Eiko

+0

बेन - पूर्वनिर्धारित स्ट्रिंग्स के लिए, वे होना चाहिए (यह समझ में आता है)। लेकिन कई मामलों में जब ये प्रश्न होते हैं, तो वे केवल पूर्वनिर्धारित स्ट्रिंग्स के लिए उपयोग नहीं किए जाने का इरादा रखते हैं। यह बहुत समय पहले था इसलिए मेरी यादें अस्पष्ट हैं, लेकिन मुझे लगता है कि मेरे मामले में, जेएसओएन के माध्यम से संकलन समय पर अज्ञात डेटा स्ट्रिंग चलाना परिणाम को गड़बड़ कर देता है। –

1

तुम कहाँ एक \ जोड़ने या निकालने चाहते हैं। बस उस जगह पर \\।