由於用戶錯誤,我有一個可能包含多個小數點的數字字符串。喜歡的東西:替換字符串中除一個字符以外的所有字符
"2.3333.555.6664438"
我希望能夠刪除字符串中的所有,但小數點的一個(第一個或最後一個最好):
"2.33335556664438"
或
"23333555.6664438"
完成此操作的最佳方法是什麼?
由於用戶錯誤,我有一個可能包含多個小數點的數字字符串。喜歡的東西:替換字符串中除一個字符以外的所有字符
"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的解決方案來創建協議擴展。 (Swift 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
}
}
}
這就是我的想法。我只是希望用某種方便的方法有更好的方法。 – DJSK