2016-10-25 112 views
0

由於用戶錯誤,我有一個可能包含多個小數點的數字字符串。喜歡的東西:替換字符串中除一個字符以外的所有字符

"2.3333.555.6664438" 

我希望能夠刪除字符串中的所有,但小數點的一個(第一個或最後一個最好):

"2.33335556664438" 

"23333555.6664438" 

完成此操作的最佳方法是什麼?

回答

3

拆分成組用句點字符分隔,並連接除第一組以外的所有其他的 。示例(斯威夫特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

迭代通過可以被視爲字符數組的字符串....設置一個標誌,以便您可以保留一個小數點...更改標誌,當您的循環遇到一個並切換標誌....所以你的小數點之一是安全的,仍然在字符串....刪除無論他們出現的其餘部分.... 簡單實現一個循環,如果其他模塊

+0

這就是我的想法。我只是希望用某種方便的方法有更好的方法。 – DJSK

0

我最終使用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 
    } 
    } 
} 
相關問題