[英]Replace all but one occurrence of a character in a string
由于用户错误,我有一串数字可能包含多个小数点。 就像是:
"2.3333.555.6664438"
我希望能够删除字符串中除小数点后的所有小数点(最好是第一个或最后一个):
"2.33335556664438"
要么
"23333555.6664438"
做到这一点的最佳方法是什么?
分成以句点字符分隔的组,并连接除第一组以外的所有组。 示例(快速3):
var string = "2.3333.555.6664438"
let groups = string.components(separatedBy: ".")
if groups.count > 1 {
string = groups[0] + "." + groups.dropFirst().joined()
}
print(string) // 2.33335556664438
或者:查找第一个句点字符并删除所有后续出现的字符:
var string = "2.3333.555.6664438"
if let r = string.range(of: ".") {
string = string.substring(to: r.upperBound)
+ string.substring(from: r.upperBound).replacingOccurrences(of: ".", with: "")
}
print(string) // 2.33335556664438
(但是请注意,小数点分隔符取决于语言环境,而不一定是句点字符。例如,在德国,它是一个逗号。)
遍历字符串,也可以将其视为字符数组。...设置标志,以便保留小数点之一...当循环遇到一个时更改标志并切换标志... 。所以您的小数点之一是安全的,仍然在字符串中....删除其余的小数点....循环的简单实现,如果没有的话
我最终使用了Martin R的解决方案来创建协议扩展。 (快速2.3)
var string = "2.3333.555.6664438".removeDuplicateCharacters(".")
extension String {
func removeDuplicateCharacters(input: String) -> String {
let string = self
var trimmedString = ""
let preGroups = string.componentsSeparatedByString(input)
if preGroups.count > 1 {
trimmedString = preGroups[0] + input + preGroups.dropFirst().joinWithSeparator("")
return trimmedString
} else {
return string
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.