2015-01-21 7 views
7

नीचे कोड की निम्न पंक्ति है जिसका उपयोग मैं कैरिज रिटर्न के साथ एक HTML ब्रेक टैग को प्रतिस्थापित करने के लिए करता हूं। हालांकि, मेरे पास अन्य HTML प्रतीक हैं जिन्हें मुझे प्रतिस्थापित करने की आवश्यकता है और जब मैं कोड की इस पंक्ति को फिर से अलग करता हूं, विभिन्न मानकों के साथ, ऐसा लगता है कि पहला व्यक्ति ओवरराइट हो गया है। क्या कोई तरीका है जिसमें मैं एकाधिक पैरामीटर शामिल कर सकता हूं? क्या स्विफ्ट में ऐसा करने का एक और अधिक प्रभावी तरीका है? उदाहरण के लिए: "br" दोनों को "" के साथ "" के साथ बदलें।स्विफ्ट स्ट्रिंग में एकाधिक वर्ण बदलें

textView.text = content.stringByReplacingOccurrencesOfString("<br /><br />", withString:"\r") 
+0

दिखाएँ कैसे आप "कोड की इस पंक्ति को दोबारा कॉल करें"। यही वह जगह है जहां आप गलत हो रहे हैं, आखिरकार। – matt

+0

textView.text = content.stringByReplacingOccurrencesOfString ("

", withString: "\ r") textView.text = content.stringByReplacingOccurrencesOfString (" ", withString: "") –

+0

लेकिन वहाँ समस्या है। आप मूल 'सामग्री' से शुरू कर रहे हैं। टेक्स्ट व्यू का टेक्स्ट ओवरराइट किया गया है क्योंकि _you_ इसे ओवरराइट कर रहा है! – matt

उत्तर

5

@matt उल्लेख किया है आप एक ही content तार के साथ खत्म हो गया शुरू कर रहे हैं। StringByReplacingOccurrencesOfString विधि वास्तव में मूल content स्ट्रिंग में कुछ भी नहीं बदलती है। प्रतिस्थापन परिवर्तन के साथ यह आपको एक नई स्ट्रिंग देता है जबकि content अपरिवर्तित बनी हुई है।

कुछ इस तरह के लिए आप

let result1 = content.stringByReplacingOccurrencesOfString("<br /><br />", withString:"\r") 
let result2 = result1.stringByReplacingOccurrencesOfString(" &nbsp;", withString:" ") 
textView.text = result2 
1
extension String { 
    var html2AttributedString:NSAttributedString { 
     return NSAttributedString(data: dataUsingEncoding(NSUTF8StringEncoding)!, options:[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding], documentAttributes: nil, error: nil)! 
    } 
} 

let myHtmlCode = "<style type=\"text/css\">#red{color:#F00}#green{color:#0F0}#blue{color: #00F}</style><span id=\"red\" >Red</span> <span id=\"green\" >Green</span><span id=\"blue\">Blue</span>" 

myHtmlCode.html2AttributedString 
6

काम करना चाहिए मैं इसके बारे में Rosetta Code

extension String { 
    func stringByRemovingAll(characters: [Character]) -> String { 
     return String(self.characters.filter({ !characters.contains($0) })) 
    } 

    func stringByRemovingAll(subStrings: [String]) -> String { 
     var resultString = self 
     subStrings.map { resultString = resultString.stringByReplacingOccurrencesOfString($0, withString: "") } 
     return resultString 
    } 
} 

उदाहरण विचार पर आधारित हल:

let str = "Hello, stackoverflow" 
let chars: [Character] = ["a", "e", "i"] 
let myStrings = ["Hello", ", ", "overflow"] 

let newString = str.stringByRemovingAll(chars) 
let anotherString = str.stringByRemovingAll(myStrings) 

परिणाम, जब मुद्रित :

newString: Hllo, stckovrflow

anotherString: stack

+2

यह एक कुशल समाधान नहीं है, तुलनाऑप्शन का उपयोग करके मेरा जवाब देखें। कॉम्पारेऑप्शन .regularExpression –

+0

@ माइकल लेकिन मुझे लगता है कि यह अधिक सामान्य मामलों में काम करता है। क्या होगा यदि मेरे तार नियमित अभिव्यक्ति नहीं हैं? आपका उत्तर कैसे बदल जाएगा? –

+0

@ कार्तिक कन्नन क्या आप नीचे दिए गए मेरे उत्तर का जिक्र कर रहे हैं? क्या आपने गलत जवाब में टिप्पणी की? यदि ऐसा है, तो कृपया दूसरों के लिए भ्रम से बचने के लिए मेरे उत्तर में प्रश्न दोहराएं। –

10

उपयोग replacingOccurrences एक String.CompareOptions.regularExpresion विकल्प के साथ

उदाहरण (स्विफ्ट 3):

var x = "<Hello, [play^ground+]>" 
let y = x.replacingOccurrences(of: "[\\[\\]^+<>]", with: "7", options: .regularExpression, range: nil) 
print(y) 

इनपुट वर्ण जो की तरह वर्ग कोष्ठकों में प्रतिस्थापित किया जाना है, इसलिए [\\ वर्ण]

आउटपुट:

7Hello, 7play7ground777 
+0

यह बहुत अच्छा और बिल्कुल वही है जो मैं ढूंढ रहा था!RegEx का बहुत बड़ा उपयोग, कुछ मैंने स्विफ्ट में ज्यादा उपयोग नहीं किया है। भयानक उत्तर माइकल के लिए धन्यवाद। – Trev14

+0

क्या आप समझा सकते हैं - क्या मुझे हमेशा '.regularExpression' का उपयोग करना चाहिए? क्या होगा यदि मुझे केवल ठोस प्रतीकों की एक सूची निर्दिष्ट करने की आवश्यकता है जिसे मुझे प्रतिस्थापित/हटाने की आवश्यकता है? –

+0

अन्य तरीके हो सकते हैं, हालांकि नियमित अभिव्यक्ति ठोस वर्णों के सेट का प्रतिनिधित्व करने का एक अच्छा तरीका है। उदाहरण के लिए यदि मैं "ए", "बी" और "जेड" को प्रतिस्थापित करना चाहता हूं, तो कोड इस तरह दिखेगा: x.replacingOccurrences (का: "[ABZ]": "7", विकल्प: .regularExpression, range : शून्य) –

संबंधित मुद्दे