如何在swift上删除字符串中特定字符的重复项?
我有一个字符串如何在swift上删除字符串中特定字符的重复项?,swift,string,duplicates,Swift,String,Duplicates,我有一个字符串11223.3445566.7788.9900,现在我想创建一个函数,在这个函数中,我可以删除该字符串中特定字符的重复项,并只保留左边的第一个字符 这是关于如何更好地解释的示例代码 let string=“11223.3445566.7788.9900” let removedDuplicate=removedDuplicate(字符串:字符串,字符:“.”) 打印(删除副本)//结果11223.344556677889900 你看,与我不同的是,我只需要删除字符串中特定字符的副
11223.3445566.7788.9900
,现在我想创建一个函数,在这个函数中,我可以删除该字符串中特定字符的重复项,并只保留左边的第一个字符
这是关于如何更好地解释的示例代码
let string=“11223.3445566.7788.9900”
let removedDuplicate=removedDuplicate(字符串:字符串,字符:“.”)
打印(删除副本)//结果11223.344556677889900
你看,与我不同的是,我只需要删除字符串中特定字符的副本,而不是所有重复的字符。你可以使用
组件(分隔符:)
和连接()
来实现这一点
func removeDuplicate(string: String, char: String) -> String {
let arr = string.components(separatedBy: char)
var result = arr[0]
if arr.count > 1 {
result += char + arr[1]
}
if arr.count > 2 {
result += arr[2...].joined()
}
return result
}
您可以使用
组件(分隔符:)
和连接()
来实现该功能
func removeDuplicate(string: String, char: String) -> String {
let arr = string.components(separatedBy: char)
var result = arr[0]
if arr.count > 1 {
result += char + arr[1]
}
if arr.count > 2 {
result += arr[2...].joined()
}
return result
}
可以找到特定字符第一次出现的位置,然后删除该位置之后的所有其他出现:
func removeDuplicate(string: String, char: Character) -> String {
if var idx = string.firstIndex(of: char) {
string.formIndex(after: &idx)
var s = string
s.replaceSubrange(idx..., with: s[idx...].filter { $0 != char })
return s
} else {
return string
}
}
例如:
let string = "11223.3445566.7788.9900"
print(removeDuplicate(string: string, char: "."))
// 11223.344556677889900
可以找到特定字符第一次出现的位置,然后删除该位置之后的所有其他出现:
func removeDuplicate(string: String, char: Character) -> String {
if var idx = string.firstIndex(of: char) {
string.formIndex(after: &idx)
var s = string
s.replaceSubrange(idx..., with: s[idx...].filter { $0 != char })
return s
} else {
return string
}
}
例如:
let string = "11223.3445566.7788.9900"
print(removeDuplicate(string: string, char: "."))
// 11223.344556677889900
或者干脆
返回字符串[…idx]+string[idx…]。我只是想知道为什么子字符串串联返回一个字符串
,而不是子字符串
。@LeoDabus:现在我看到了:String[idx…]。filter()
返回一个字符串
,并且有一个重载+
,将一个序列作为第一个参数,一个字符串作为第二个参数,还一个String@LeoDabus:选中此项:“根据SE-163中的指导,返回新字符串的方法不应返回子字符串,子字符串不应仅采用返回Self的RangeReplacableCollection.filter的默认值”@LeoDabus:这就是我的意思,它是与我上面链接的pull请求一起添加的。或者干脆返回字符串[…idx]+字符串[idx…]。过滤器{$0!=char}
@LeoDabus:是的,这是另一个选项。我只是想知道为什么子字符串串联返回一个字符串
,而不是子字符串
。@LeoDabus:现在我看到了:String[idx…]。filter()
返回一个字符串
,并且有一个重载+
,将一个序列作为第一个参数,一个字符串作为第二个参数,还一个String@LeoDabus:选中此项:“根据SE-163中的指导,返回新字符串的方法不应返回子字符串,子字符串不应仅采用返回Self的RangeReplaceableCollection.filter的默认值”@LeoDabus:这就是我的意思,它是与我上面链接的pull请求一起添加的。