2009-06-17 24 views
16

की पहली पंक्ति से न्यूलाइन कैरेक्टर को हटाएं मैं एनएसएसटींग से पहले \ n कैरेक्टर को कैसे हटा सकता हूं?एनएसएसटींग

संपादित करें: बस स्पष्ट करने के लिए, मैं क्या करना चाहता हूं: यदि स्ट्रिंग की पहली पंक्ति में \ n वर्ण है, तो इसे हटाएं और कुछ भी नहीं करें।

अर्थात्:

@"\nhello, this is the first line\nthis is the second line" 

और एक स्ट्रिंग है पहली पंक्ति में एक नई पंक्ति शामिल नहीं है का विरोध: स्ट्रिंग इस तरह है

@"hello, this is the first line\nthis is the second line." 

मुझे आशा है कि इसे और अधिक स्पष्ट करता है ।

+0

आपका संपादन वास्तव में प्रश्न को कम स्पष्ट करता है। संकल्पनात्मक रूप से, "स्ट्रिंग की पहली पंक्ति", यदि कुछ भी हो, तो स्ट्रिंग में पहली नईलाइन तक (और शायद) सहित सभी वर्णों को मुझे सूचित किया जाएगा। यदि आपका मतलब "पहली पंक्ति" से कुछ और है, तो आपको फिर से स्पष्टीकरण की आवश्यकता हो सकती है। –

+0

क्विन ने क्या कहा। परिभाषा के अनुसार, पहली पंक्ति में एक नई लाइन होनी चाहिए। अन्यथा स्ट्रिंग में केवल एक पंक्ति है। – Chuck

उत्तर

11

इस चाल करना चाहिए: एक NSMutableString बनाने और कुछ का उपयोग कर के बजाय

NSString * ReplaceFirstNewLine(NSString * original) 
{ 
    NSMutableString * newString = [NSMutableString stringWithString:original]; 

    NSRange foundRange = [original rangeOfString:@"\n"]; 
    if (foundRange.location != NSNotFound) 
    { 
     [newString replaceCharactersInRange:foundRange 
           withString:@""]; 
    } 

    return [[newString retain] autorelease]; 
} 
+3

इसमें एक (1) एक म्यूटेबल स्ट्रिंग लौटा रहा है या (2) इससे बचने के लिए एक अपरिवर्तनीय प्रति की आवश्यकता है। उपयोग करें- स्ट्रिंगबियरिंग ऑक्करेंस ओफस्ट्रिंग: साथ स्ट्रिंग: विकल्प: रेंज: इसे और अधिक कुशलतापूर्वक करने के लिए। मेरे उत्तर में विवरण और कोड नमूना शामिल है। –

39
[string stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]] 

आपकी स्ट्रिंग को किसी भी तरह की न्यूलाइन से ट्रिम कर देगा, अगर आप यही चाहते हैं।

[string stringByReplacingOccurrencesOfString:@"\n" withString:@"" options:0 range:NSMakeRange(0, 1)] 

वास्तव में क्या करेंगे आप क्या पूछने के लिए और न्यू लाइन को दूर करता है, तो यह स्ट्रिंग में पहले वर्ण

+1

विकल्प: शून्य विकल्प होना चाहिए: 0 –

+0

शून्य == NULL == 0 सी ++ में। nil == NULL == (शून्य *) 0 में सी। एनएसएसटींग कॉम्पैयरऑप्शन टाइपिफ़ एनएसयूइंटर है जो 32-बिट प्लेटफार्मों पर 32-बिट और 64 बिट प्लेटफॉर्म पर 64-बिट है। नामित स्थिरांक के स्थान पर पूर्णांक अक्षर मेरी संवेदनशीलताओं के खिलाफ जाते हैं;) – monowerker

+1

@monowerker: यह सी ++ नहीं है। मुझे एहसास है कि शून्य को शून्य के रूप में परिभाषित किया जाता है। 3.0 में किसी कारण के लिए एक्सकोड कंपाइलर आपको 0 को हल करने का उपयोग करके चेतावनी देता है। अजीब, लेकिन ऐसा ही होता है। –

6

कॉल को बनाए रखें/रिलीज़ करें, आप केवल मूल स्ट्रिंग का उपयोग कर सकते हैं और निम्न का उपयोग करके कोड को सरल बना सकते हैं: (10.5+ की आवश्यकता है)

NSRange foundRange = [original rangeOfString:@"\n"]; 
if (foundRange.location != NSNotFound) 
    [original stringByReplacingOccurrencesOfString:@"\n" 
             withString:@"" 
              options:0 
              range:foundRange]; 

(विवरण के लिए -stringByReplacingOccurrencesOfString:withString:options:range: देखें।)

आखिरी कॉल विधि कॉल का परिणाम भी सुरक्षित रूप से वापस मूल को सौंपा जा सकता यदि आप autorelease क्या वहाँ पहले, ताकि आप स्मृति रिसाव नहीं है।

+0

+1 यह मेरे समाधान से काफी बेहतर है। वह विशेष विधि केवल संस्करण 10.5 और ऊपर उपलब्ध है, लेकिन अब तक यह सबसे अधिक सिस्टम होना चाहिए, जो 10.6 के साथ जल्द ही बाहर आ रहा है। –

+0

इस विधि के लिए 10.5+ पर उत्कृष्ट पकड़, मैं उसे भूल गया था।मैं भाग्यशाली हूं कि अब टाइगर समर्थन के बारे में चिंता न करें। :-) –