সুইফ্ট স্ট্রিংয়ের অক্ষরগুলি প্রতিস্থাপনের কোনও উপায়?


474

আমি একটি সুইফ্টে অক্ষরগুলি প্রতিস্থাপনের জন্য একটি উপায় খুঁজছি String

উদাহরণ: "এটি আমার স্ট্রিং"

"এটি + + + আমার + স্ট্রিং" পেতে আমি "+" এর সাথে "+" প্রতিস্থাপন করতে চাই।

আমি কীভাবে এটি অর্জন করতে পারি?


উত্তর:


912

এই উত্তরটি সুইফট 4 এবং 5 এর জন্য আপডেট করা হয়েছে । আপনি যদি এখনও সুইফট 1, 2 বা 3 ব্যবহার করেন তবে পুনর্বিবেচনার ইতিহাসটি দেখুন।

আপনার কাছে কয়েকটি বিকল্প রয়েছে। আপনি @ জৌমার্ড প্রস্তাবিত এবং ব্যবহার হিসাবে করতে পারেনreplacingOccurrences()

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

এবং নীচে @cprcrack দ্বারা উল্লিখিত হিসাবে, optionsএবং rangeপরামিতিগুলি alচ্ছিক , সুতরাং যদি আপনি স্ট্রিং তুলনা বিকল্পগুলি বা এর মধ্যে প্রতিস্থাপনটি করতে কোনও ব্যাপ্তি নির্দিষ্ট করতে না চান তবে আপনার কেবল নিম্নলিখিতগুলির প্রয়োজন।

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
})

9
বিকল্পগুলি এবং পরিসীমা পরামিতিগুলি
alচ্ছিক

1
স্ট্রিংবায়ারপ্লেসিংঅ্যাকসিওরেন্সস অফ স্ট্রিংয়ের দুর্দান্ত সুইফট 2 প্রতিস্থাপন
rjb101

আমি জানি না আমি কিছু ভুল করছি কিনা তবে দ্বিতীয় সুইফট 2.0 সমাধান আমাকে এবং alচ্ছিক স্ট্রিংটি ছেড়ে দেয় with অরিজিনাল স্ট্রিংটি দেখতে দেখতে: "x86_64"এবং নতুন ম্যাপিংয়ের মতো দেখাচ্ছে"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
জন শেলি

7
stringByReplacingOccurrencesOfStringসুইফট 2-এ ব্যবহার করার ক্ষেত্রে যার যার সমস্যা ছিল , আপনার import Foundationসেই পদ্ধতিটি ব্যবহার করতে সক্ষম হওয়া প্রয়োজন ।
লিরন ইয়াহদাভ

1
বাহ, স্ট্রিংবায়ারপ্লেসিংঅ্যাকচারেন্সস অফ স্ট্রিং, কতটা স্বজ্ঞাত! আমি মেক
নিউ

64

আপনি এটি ব্যবহার করতে পারেন:

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)
    }
}

2
আমি এই ফাংশনটির নাম "প্রতিস্থাপন" করব না কারণ এটি প্রস্তাব দেয় এটি পরিবর্তনশীলকে পরিবর্তিত করে। অ্যাপলের মতো একই ব্যাকরণ ব্যবহার করুন। এটিকে "রিপ্লেজিং (_: উইথ স্ট্রিং :)" বলা এটি আরও স্পষ্ট করে তোলে। ভবিষ্যতে রূপান্তরকারী "প্রতিস্থাপন" ফাংশন নামকরণেও বিরোধ করবে।
সুনকাস

57

সুইফট 3, সুইফ্ট 4, সুইফ্ট 5 সলিউশন

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: "+")

এটি এই প্রশ্নের একটি উত্তর।
বিজেন্দ্র সিং শেখাওয়াত

19

আপনি কি এটি পরীক্ষা করেছেন:

var test = "This is my string"

let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)

13

সুইফট 4:

let abc = "Hello world"

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

print(result :\(result))

আউটপুট:

result : Hello_world

9

আমি এই এক্সটেনশনটি ব্যবহার করছি:

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:"+")

8

সুনকাসের লাইন ধরে একটি সুইফ্ট 3 সমাধান:

extension String {
    mutating func replace(_ originalString:String, with newString:String) {
        self = self.replacingOccurrences(of: originalString, with: newString)
    }
}

ব্যবহার করুন:

var string = "foo!"
string.replace("!", with: "?")
print(string)

আউটপুট:

foo?

7

বিদ্যমান বিভাগে পরিবর্তনযোগ্য স্ট্রিং সংশোধন করে এমন একটি বিভাগ:

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: "+")

4

রামিসের উত্তরের ভিত্তিতে সুইফট 3 সমাধান :

extension String {
    func withReplacedCharacters(_ characters: String, by separator: String) -> String {
        let characterSet = CharacterSet(charactersIn: characters)
        return components(separatedBy: characterSet).joined(separator: separator)
    }
}

সুইফট 3 নামকরণ কনভেনশন অনুযায়ী উপযুক্ত ফাংশন নাম নিয়ে আসতে চেষ্টা করেছি।


এটি আমার পছন্দসই সমাধান, কারণ এটি আপনাকে একসাথে একাধিক অক্ষর প্রতিস্থাপন করতে দেয়।
আগুন

4

আমার সাথে কম ঘটেছে, আমি কেবলমাত্র (শব্দ বা চরিত্র) এর মধ্যে পরিবর্তন করতে চাই String

সুতরাং আমি ব্যবহার করেছি Dictionary

  extension String{
    func replace(_ dictionary: [String: String]) -> String{
          var result = String()
          var i = -1
          for (of , with): (String, String)in dictionary{
              i += 1
              if i<1{
                  result = self.replacingOccurrences(of: of, with: with)
              }else{
                  result = result.replacingOccurrences(of: of, with: with)
              }
          }
        return result
     }
    }

ব্যবহার

let mobile = "+1 (800) 444-9999"
let dictionary = ["+": "00", " ": "", "(": "", ")": "", "-": ""]
let mobileResult = mobile.replace(dictionary)
print(mobileResult) // 001800444999

ভাল সমাধান! ধন্যবাদ
দাশোগা

প্রায় সব কিছুর জন্য বিভিন্ন পদক্ষেপ ব্যবহারের জন্য সুইফ্ট তার পথ থেকে বেরিয়ে যায়। প্রায় অন্য যে কোনও ভাষা এটি ঠিকreplace
জাভদ্বা


1

আমি মনে করি রেগেক্স সবচেয়ে নমনীয় এবং শক্ত উপায়:

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"

1

সুইফট এক্সটেনশন:

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একাধিক প্রতিস্থাপন করার জন্য একটি পাসের একটি অ্যারে পাস করতে পারেন।



1

এটি দ্রুত 4.2 এ সহজ। শুধু replacingOccurrences(of: " ", with: "_")প্রতিস্থাপনের জন্য ব্যবহার করুন

var myStr = "This is my string"
let replaced = myStr.replacingOccurrences(of: " ", with: "_")
print(replaced)

1

এক্সকোড 11 • সুইফ্ট 5.1

স্ট্রিংপ্রোটোকলের পরিবর্তনের পদ্ধতিটি নিম্নলিখিত replacingOccurrencesহিসাবে প্রয়োগ করা যেতে পারে:

extension RangeReplaceableCollection where Self: StringProtocol {
    mutating func replaceOccurrences<Target: StringProtocol, Replacement: StringProtocol>(of target: Target, with replacement: Replacement, options: String.CompareOptions = [], range searchRange: Range<String.Index>? = nil) {
        self = .init(replacingOccurrences(of: target, with: replacement, options: options, range: searchRange))
    }
}

var name = "This is my string"
name.replaceOccurrences(of: " ", with: "+")
print(name) // "This+is+my+string\n"

1
এটি একটি দুর্দান্ত সামান্য tidbit। ধন্যবাদ লিও!
পিটার সুওয়ারা

0

আপনি যদি উদ্দেশ্য-সি NSStringপদ্ধতিগুলি ব্যবহার করতে না চান তবে আপনি কেবল splitএবং ব্যবহার করতে পারেন join:

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

split(string, isSeparator: { $0 == " " })স্ট্রিংগুলির অ্যারে ( ["This", "is", "my", "string"]) প্রদান করে।

joinএকটি সঙ্গে এই উপাদান যোগদান করে +, পছন্দসই আউটপুট ফলে: "This+is+my+string"


0

আমি এই খুব সহজ ফানক বাস্তবায়ন করেছি:

func convap (text : String) -> String {
    return text.stringByReplacingOccurrencesOfString("'", withString: "''")
}

সুতরাং আপনি লিখতে পারেন:

let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES ('\(convap(value1))','\(convap(value2)')

0

আপনি এটি পরীক্ষা করতে পারেন:

চলুন নতুন স্ট্রিং = টেস্ট.স্ট্রিংবাইরেপ্লেসিংঅ্যাকসিওরেন্সস অফ স্ট্রিং ("", স্ট্রিং: "+", বিকল্পগুলি: শূন্য, ব্যাপ্তি: শূন্য)


-1

স্থানটিতে উপস্থিতির জন্য পদ্ধতিটি প্রতিস্থাপনের জন্য এখানে একটি এক্সটেনশান দেওয়া আছে String, এটি কোনও অপ্রয়োজনীয় অনুলিপি এবং সমস্ত কিছু জায়গায় করে না:

extension String {
    mutating func replaceOccurrences<Target: StringProtocol, Replacement: StringProtocol>(of target: Target, with replacement: Replacement, options: String.CompareOptions = [], locale: Locale? = nil) {
        var range: Range<Index>?
        repeat {
            range = self.range(of: target, options: options, range: range.map { self.index($0.lowerBound, offsetBy: replacement.count)..<self.endIndex }, locale: locale)
            if let range = range {
                self.replaceSubrange(range, with: replacement)
            }
        } while range != nil
    }
}

(পদ্ধতির স্বাক্ষরটি অন্তর্নির্মিত পদ্ধতির স্বাক্ষরের নকলও করে String.replacingOccurrences())

নিম্নলিখিত পদ্ধতিতে ব্যবহার করা যেতে পারে:

var string = "this is a string"
string.replaceOccurrences(of: " ", with: "_")
print(string) // "this_is_a_string"

লক্ষ্য পাঠ্যে যদি অন্তর্ভুক্ত লেখাটি থাকে তবে আমি অসীম লুপগুলি রোধ করতে কোড আপডেট করেছি updated
স্টাফেন কোপিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.