由于用户错误,我有一串数字可能包含多个小数点。类似的东西:
"2.3333.555.6664438"
我希望能够删除字符串中除一个小数点以外的所有小数点(首先是最后一个或最后一个):
"2.33335556664438"
或
"23333555.6664438"
实现这一目标的最佳方法是什么?
答案 0 :(得分:4)
拆分为由句点字符分隔的组,并连接 除了第一组之外的所有人。示例(Swift 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
(但请注意,小数点分隔符取决于区域设置,不一定是句点字符。例如,它是德国的逗号。)
答案 1 :(得分:1)
遍历String,它也可以被视为一个字符数组....设置一个标志,这样你就可以保留一个小数点...当你的循环遇到一个时改变标志并切换标志....所以你的小数点之一是安全的,仍然在字符串中....除去它们出现的任何地方...... 简单实现循环和if else模块
答案 2 :(得分:0)
我最终使用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
}
}
}