thi*_*uan 6 string swift swift2
一个字符串,如! !! yuahl! !,我想删除!和 ,当我像这样的代码
for index in InputName.characters.indices {
if String(InputName[index]) == "" || InputName.substringToIndex(index) == "!" {
InputName.removeAtIndex(index)
}
}
Run Code Online (Sandbox Code Playgroud)
有这个错误"致命错误:下标:subRange扩展过String结束",我该怎么办?THX:D
Alf*_*lfi 11
Swift 3+
let myString = "aaaaaaaabbbb"
let replaced = myString.replacingOccurrences(of: "bbbb", with: "") // "aaaaaaaa"
Run Code Online (Sandbox Code Playgroud)
如果您只需要删除两端的字符,您可以使用stringByTrimmingCharactersInSet(_:)
let delCharSet = NSCharacterSet(charactersInString: "! ")
let s1 = "! aString! !"
let s1Del = s1.stringByTrimmingCharactersInSet(delCharSet)
print(s1Del) //->aString
let s2 = "! anotherString !! aString! !"
let s2Del = s2.stringByTrimmingCharactersInSet(delCharSet)
print(s2Del) //->anotherString !! aString
Run Code Online (Sandbox Code Playgroud)
如果您还需要删除中间的字符,“从过滤的输出重建”将比重复单个字符删除更有效。
var tempUSView = String.UnicodeScalarView()
tempUSView.appendContentsOf(s2.unicodeScalars.lazy.filter{!delCharSet.longCharacterIsMember($0.value)})
let s2DelAll = String(tempUSView)
print(s2DelAll) //->anotherStringaString
Run Code Online (Sandbox Code Playgroud)
如果您不介意生成许多中间字符串和数组,那么这个单个衬垫可以生成预期的输出:
let s2DelAll2 = s2.componentsSeparatedByCharactersInSet(delCharSet).joinWithSeparator("")
print(s2DelAll2) //->anotherStringaString
Run Code Online (Sandbox Code Playgroud)
小智 5
我发现该filter方法是处理此类事情的好方法:
let unfiltered = "! !! yuahl! !"
// Array of Characters to remove
let removal: [Character] = ["!"," "]
// turn the string into an Array
let unfilteredCharacters = unfiltered.characters
// return an Array without the removal Characters
let filteredCharacters = unfilteredCharacters.filter { !removal.contains($0) }
// build a String with the filtered Array
let filtered = String(filteredCharacters)
print(filtered) // => "yeah"
// combined to a single line
print(String(unfiltered.characters.filter { !removal.contains($0) })) // => "yuahl"
Run Code Online (Sandbox Code Playgroud)