如何在Swift中删除String
中的变音符号(或重音符号)(比如说改变“één”到“een”)?我是否必须回到NSString
或者可以在Swift中完成?
答案 0 :(得分:119)
您可以直接在Swift String
上操作(如果"基金会"已导入):
let foo = "één"
let bar = foo.stringByFoldingWithOptions(.DiacriticInsensitiveSearch, locale: NSLocale.currentLocale())
print(bar) // een
斯威夫特3:
let foo = "één"
let bar = foo.folding(options: .diacriticInsensitive, locale: .current)
print(bar) // een
答案 1 :(得分:11)
更新@ MartinR的回答... Swift 3 扩展名,提供用于排序/搜索的字符串,这可能对某人有用...
extension String {
var forSorting: String {
let simple = folding(options: [.diacriticInsensitive, .widthInsensitive, .caseInsensitive], locale: nil)
let nonAlphaNumeric = CharacterSet.alphanumerics.inverted
return simple.components(separatedBy: nonAlphaNumeric).joined(separator: "")
}
}
e.g。
print("Mÿ nâMe ís jÄço´B".forSorting) // "mynameisjacob"
答案 2 :(得分:0)
回答myfu <- function(a, b){
# check a and b length
if (length(a) !=2 & length(b) != 2)
return(NA)
res <- sqrt((b[2]^2-a[2]^2)-(b[1]^2-a[1]^2))
return(res)}
Swift 5.0.1
并使用它func toNoSmartQuotes() -> String {
let userInput: String = self
return userInput.folding(options: .diacriticInsensitive, locale: .current)
}
答案 3 :(得分:0)
这是我的解决方案
快捷键5
extension String {
func unaccent() -> String {
return self.folding(options: .diacriticInsensitive, locale: .current)
}
}