Swift String에서 문자를 바꾸는 방법은 무엇입니까?
Swift에서 문자를 바꾸는 방법을 찾고 String
있습니다.
예: "This is my string"
나는 대체하고 싶습니다 으로
+
활용하려면 다음 "This+is+my+string"
.
어떻게하면 되나요?
이 답변은 Swift 4 용 으로 업데이트 되었습니다 . 여전히 Swift 1, 2 또는 3을 사용중인 경우 개정 내역을 참조하십시오.
몇 가지 옵션이 있습니다. @jaumard가 제안하고 사용하는 것처럼 할 수 있습니다.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: "+")
또는 NSString의 API를 사용하지 않는 Swifty 솔루션을 찾고 있다면 이것을 사용할 수 있습니다.
let aString = "Some search text"
let replaced = String(aString.map {
$0 == " " ? "+" : $0
})
이것을 사용할 수 있습니다 :
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: "+")
이것을 테스트 했습니까?
var test = "This is my string"
let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)
스위프트 4 :
let abc = "Hello world"
let result = abc.replacingOccurrences(of: " ", with: "_",
options: NSString.CompareOptions.literal, range:nil)
print(result :\(result))
산출:
result : Hello_world
이 확장명을 사용하고 있습니다 :
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:"+")
Sunkas 라인에 따른 Swift 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: "+")
Ramis의 답변을 기반으로 한 Swift 3 솔루션 :
extension String {
func withReplacedCharacters(_ characters: String, by separator: String) -> String {
let characterSet = CharacterSet(charactersIn: characters)
return components(separatedBy: characterSet).joined(separator: separator)
}
}
Swift 3 명명 규칙에 따라 적절한 기능 이름을 생각해 보았습니다.
나에게 덜 일어났다. 나는 단지 (단어 나 문자)를 바꾸고 싶다. String
그래서 나는 Dictionary
extension String{
func replaceDictionary(_ 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.replaceDictionary(dictionary)
print(mobileResult) // 001800444999
Regex가 가장 유연하고 견고한 방법이라고 생각합니다.
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"
다음은 Swift 3의 예입니다.
var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
stringToReplace?.replaceSubrange(range, with: "your")
}
이것은 빠른 4.2에서는 쉽습니다. 그냥 replacingOccurrences(of: " ", with: "_")
교체에 사용
var myStr = "This is my string"
let replaced = myStr.replacingOccurrences(of: " ", with: "_")
print(replaced)
당신이 목표 - C를 사용하지 않으려면 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"
.
이 매우 쉬운 기능을 구현했습니다.
func convap (text : String) -> String {
return text.stringByReplacingOccurrencesOfString("'", withString: "''")
}
그래서 당신은 쓸 수 있습니다 :
let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES ('\(convap(value1))','\(convap(value2)')
스위프트 확장 :
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
한 번에 여러 배열을 전달하여 둘 이상의 교체를 할 수 있습니다.
여기에 제자리에서 발생하는 replace 메소드에 대한 확장이 있습니다.이 메소드 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"
참고 URL : https://stackoverflow.com/questions/24200888/any-way-to-replace-characters-on-swift-string
'Programing' 카테고리의 다른 글
플라스크에서 정적 파일을 제공하는 방법 (0) | 2020.02.18 |
---|---|
Eclipse의 Android Emulator에서 http : // localhost 웹 서버에 연결하는 방법 (0) | 2020.02.18 |
C # nullable int를 int로 변환하는 방법 (0) | 2020.02.18 |
안드로이드 ADB 도구를 사용하여 응용 프로그램을 시작하는 방법은 무엇입니까? (0) | 2020.02.18 |
여러 $ scope 속성보기 (0) | 2020.02.18 |