swift:如何删除特定字符?

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)


OOP*_*Per 6

如果您只需要删除两端的字符,您可以使用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)

  • 不要忘记您需要“导入 Foundation”才能使此代码正常工作。 (2认同)

小智 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)