আমি একটি সুইফ্টে অক্ষরগুলি প্রতিস্থাপনের জন্য একটি উপায় খুঁজছি String
।
উদাহরণ: "এটি আমার স্ট্রিং"
"এটি + + + আমার + স্ট্রিং" পেতে আমি "+" এর সাথে "+" প্রতিস্থাপন করতে চাই।
আমি কীভাবে এটি অর্জন করতে পারি?
আমি একটি সুইফ্টে অক্ষরগুলি প্রতিস্থাপনের জন্য একটি উপায় খুঁজছি String
।
উদাহরণ: "এটি আমার স্ট্রিং"
"এটি + + + আমার + স্ট্রিং" পেতে আমি "+" এর সাথে "+" প্রতিস্থাপন করতে চাই।
আমি কীভাবে এটি অর্জন করতে পারি?
উত্তর:
এই উত্তরটি সুইফট 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
})
"x86_64"
এবং নতুন ম্যাপিংয়ের মতো দেখাচ্ছে"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
সুইফট 2-এ ব্যবহার করার ক্ষেত্রে যার যার সমস্যা ছিল , আপনার import Foundation
সেই পদ্ধতিটি ব্যবহার করতে সক্ষম হওয়া প্রয়োজন ।
আপনি এটি ব্যবহার করতে পারেন:
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)
}
}
সুইফট 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: "+")
আমি এই এক্সটেনশনটি ব্যবহার করছি:
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:"+")
সুনকাসের লাইন ধরে একটি সুইফ্ট 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?
বিদ্যমান বিভাগে পরিবর্তনযোগ্য স্ট্রিং সংশোধন করে এমন একটি বিভাগ:
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: "+")
রামিসের উত্তরের ভিত্তিতে সুইফট 3 সমাধান :
extension String {
func withReplacedCharacters(_ characters: String, by separator: String) -> String {
let characterSet = CharacterSet(charactersIn: characters)
return components(separatedBy: characterSet).joined(separator: separator)
}
}
সুইফট 3 নামকরণ কনভেনশন অনুযায়ী উপযুক্ত ফাংশন নাম নিয়ে আসতে চেষ্টা করেছি।
আমার সাথে কম ঘটেছে, আমি কেবলমাত্র (শব্দ বা চরিত্র) এর মধ্যে পরিবর্তন করতে চাই 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
আমি মনে করি রেগেক্স সবচেয়ে নমনীয় এবং শক্ত উপায়:
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 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
একাধিক প্রতিস্থাপন করার জন্য একটি পাসের একটি অ্যারে পাস করতে পারেন।
সুইফট 3 এর উদাহরণ এখানে:
var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
stringToReplace?.replaceSubrange(range, with: "your")
}
এক্সকোড 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"
আপনি যদি উদ্দেশ্য-সি 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"
।
আপনি এটি পরীক্ষা করতে পারেন:
চলুন নতুন স্ট্রিং = টেস্ট.স্ট্রিংবাইরেপ্লেসিংঅ্যাকসিওরেন্সস অফ স্ট্রিং ("", স্ট্রিং: "+", বিকল্পগুলি: শূন্য, ব্যাপ্তি: শূন্য)
স্থানটিতে উপস্থিতির জন্য পদ্ধতিটি প্রতিস্থাপনের জন্য এখানে একটি এক্সটেনশান দেওয়া আছে 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"