替换字符串中除一个字符外的所有字符

时间:2016-10-25 19:41:29

标签: ios swift string

由于用户错误,我有一串数字可能包含多个小数点。类似的东西:

"2.3333.555.6664438"

我希望能够删除字符串中除一个小数点以外的所有小数点(首先是最后一个或最后一个):

"2.33335556664438" 

"23333555.6664438"

实现这一目标的最佳方法是什么?

3 个答案:

答案 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
    }
  }
}
相关问题