【问题标题】:How to remove duplicate of a specific character in the string on swift?如何快速删除字符串中特定字符的重复项?
【发布时间】:2020-09-16 05:40:44
【问题描述】:

我有一个11223.3445566.7788.9900 字符串,现在我想创建一个函数,在该函数中我可以删除该字符串中特定字符的重复项,只保留左侧的第一个字符。

这是我如何更好地解释的示例代码

let string = "11223.3445566.7788.9900"

let removedDuplicate = removeDuplicate(string: string, char: ".")

print(removedDuplicate) // result 11223.344556677889900

你看,不像here我只需要删除字符串中特定字符的重复,而不是所有重复的字符。

【问题讨论】:

    标签: swift string duplicates


    【解决方案1】:

    您可以找到特定字符第一次出现的位置,然后删除该位置之后的所有其他出现:

    func removeDuplicate(string: String, char: Character) -> String {
        if var idx = string.firstIndex(of: char) {
            string.formIndex(after: &idx)
            var s = string
            s.replaceSubrange(idx..., with: s[idx...].filter { $0 != char })
            return s
        } else {
            return string
        }
    }
    

    例子:

    let string = "11223.3445566.7788.9900"
    print(removeDuplicate(string: string, char: "."))
    // 11223.344556677889900
    

    【讨论】:

    • 或者干脆return string[...idx] + string[idx...].filter{$0 != char}
    • @LeoDabus:是的,这是另一种选择。我只是想知道为什么子字符串连接返回 String 而不是 SubString ...
    • @LeoDabus:现在我看到了:string[idx...].filter() 返回一个String,并且+ 的重载将一个序列作为第一个参数,一个字符串作为第二个参数,并返回一个字符串
    • @LeoDabus:检查此github.com/apple/swift/pull/10871“根据 SE-163 中的指导,返回新字符串的方法不应返回子字符串,子字符串不应仅采用 RangeReplaceableCollection 的默认值。返回自我的过滤器”
    • @LeoDabus:这就是我的意思,它是通过我上面链接的拉取请求添加的。
    【解决方案2】:

    您可以使用 components(separatedBy:)joined() 来实现该功能,

    func removeDuplicate(string: String, char: String) -> String {
        let arr = string.components(separatedBy: char)
        var result = arr[0]
        if arr.count > 1 {
            result += char + arr[1]
        }
        if arr.count > 2 {
            result += arr[2...].joined()
        }
        return result
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 2012-10-21
      • 1970-01-01
      • 2018-11-21
      • 2020-12-25
      • 2016-08-30
      • 2018-09-16
      • 2020-02-04
      相关资源
      最近更新 更多