ios - स्विफ्ट स्ट्रिंग पर वर्णों को प्रतिस्थापित करने का कोई तरीका?




swift string (10)

आप इसका उपयोग कर सकते हैं:

let s = "This is my string"
let modified = s.replace(" ", withString:"+")    

यदि आप अपने कोड में कहीं भी इस एक्सटेंशन विधि को जोड़ते हैं:

extension String
{
    func replace(target: String, withString: String) -> String
    {
       return self.stringByReplacingOccurrencesOfString(target, withString: withString, options: NSStringCompareOptions.LiteralSearch, range: nil)
    }
}

स्विफ्ट 3:

extension String
{
    func replace(target: String, withString: String) -> String
    {
        return self.replacingOccurrences(of: target, with: withString, options: NSString.CompareOptions.literal, range: nil)
    }
}

मैं स्विफ्ट String में वर्णों को प्रतिस्थापित करने का एक तरीका ढूंढ रहा हूं।

उदाहरण: "This is my string"

मैं प्रतिस्थापित करना चाहता हूं + प्राप्त करने के लिए: "This+is+my+string"

इसे कैसे प्राप्त किया जा सकता है?


एक श्रेणी जो मौजूदा म्यूटेबल स्ट्रिंग को संशोधित करती है:

extension String
{
    mutating func replace(originalString:String, withString newString:String)
    {
        let replacedString = self.stringByReplacingOccurrencesOfString(originalString, withString: newString, options: nil, range: nil)
        self = replacedString
    }
}

उपयोग:

name.replace(" ", withString: "+")

मुझे लगता है कि रेगेक्स सबसे लचीला और ठोस तरीका है:

var str = "This is my string"
let regex = try! NSRegularExpression(pattern: " ", options: [])
let output = regex.stringByReplacingMatchesInString(
    str,
    options: [],
    range: NSRange(location: 0, length: str.characters.count),
    withTemplate: "+"
)
// output: "This+is+my+string"

मैं इस विस्तार का उपयोग कर रहा हूं:

extension String {

    func replaceCharacters(characters: String, toSeparator: String) -> String {
        let characterSet = NSCharacterSet(charactersInString: characters)
        let components = self.componentsSeparatedByCharactersInSet(characterSet)
        let result = components.joinWithSeparator("")
        return result
    }

    func wipeCharacters(characters: String) -> String {
        return self.replaceCharacters(characters, toSeparator: "")
    }
}

उपयोग:

let token = "<34353 43434>"
token.replaceCharacters("< >", toString:"+")

यदि आप उद्देश्य-सी NSString विधियों का उपयोग नहीं करना चाहते हैं, तो आप केवल split उपयोग कर सकते हैं और join :

var string = "This is my string"
string = join("+", split(string, isSeparator: { $0 == " " }))

split(string, isSeparator: { $0 == " " }) तारों की एक सरणी देता है ( ["This", "is", "my", "string"] )।

इन तत्वों को एक + साथ join शामिल join , जिसके परिणामस्वरूप वांछित आउटपुट होता है: "This+is+my+string"


यह उत्तर स्विफ्ट 4 के लिए अपडेट किया गया है। यदि आप अभी भी स्विफ्ट 1, 2 या 3 का उपयोग कर रहे हैं तो संशोधन इतिहास देखें।

आपके पास विकल्पों की एक जोड़ी है। आप @jaumard के रूप में कर सकते हैं और replacingOccurrences() उपयोग कर सकते हैं Occurrences replacingOccurrences()

let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+", options: .literal, range: nil)

और जैसा कि नीचे @cprcrack द्वारा नोट किया गया है, options और range पैरामीटर वैकल्पिक हैं, इसलिए यदि आप स्ट्रिंग तुलना विकल्प या प्रतिस्थापन करने के लिए एक सीमा निर्दिष्ट नहीं करना चाहते हैं, तो आपको केवल निम्न की आवश्यकता है।

let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+")

या, यदि डेटा इस तरह के एक विशिष्ट प्रारूप में है, जहां आप केवल अलगाव वर्णों को प्रतिस्थापित कर रहे हैं, तो आप स्ट्रिंग और सरणी को तोड़ने के लिए components() का उपयोग कर सकते हैं, और फिर आप उन्हें वापस रखने के लिए join() फ़ंक्शन का उपयोग कर सकते हैं एक निर्दिष्ट विभाजक के साथ मिलकर।

let toArray = aString.components(separatedBy: " ")
let backToString = toArray.joined(separator: "+")

या यदि आप एक अधिक स्विफ्ट समाधान की तलाश में हैं जो एनएसएसटींग से एपीआई का उपयोग नहीं करता है, तो आप इसका इस्तेमाल कर सकते हैं।

let aString = "Some search text"

let replaced = String(aString.map {
    $0 == " " ? "+" : $0
})

स्विफ्ट 3 के लिए यहां उदाहरण दिया गया है:

var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
   stringToReplace?.replaceSubrange(range, with: "your")
} 

स्विफ्ट 4:

let abc = "Hello world"

let result = abc.replacingOccurrences(of: " ", with: "_", 
    options: NSString.CompareOptions.literal, range:nil)

print(result :\(result))

आउटपुट:

result : Hello_world

स्विफ्ट 3 समाधान

let exampleString = "Example string"

//Solution suggested above in Swift 3.0
let stringToArray = exampleString.components(separatedBy: " ")
let stringFromArray = stringToArray.joined(separator: "+")

//Swiftiest solution
let swiftyString = exampleString.replacingOccurrences(of: " ", with: "+")

स्विफ्ट एक्सटेंशन:

extension String {

    func stringByReplacing(replaceStrings set: [String], with: String) -> String {
        var stringObject = self
        for string in set {
            stringObject = self.stringByReplacingOccurrencesOfString(string, withString: with)
        }
        return stringObject
    }

}

आगे बढ़ें और इसे इस्तेमाल करें जैसे let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")

फ़ंक्शन की गति कुछ ऐसा है जिसे मुझे शायद ही गर्व हो सकता है, लेकिन आप एक से अधिक प्रतिस्थापन करने के लिए एक पास में String की एक सरणी पास कर सकते हैं।






string