簡體   English   中英

如何創建一個正則表達式來找出字符串中重復的字符?

[英]How to create a regular expression to find out repeated character in string?

例如:

  1. HelloWorld-重復的字符為5(l重復3次,o重復2次)
  2. Smart2000,重復字符= 3?(0重復3次)
  3. Smart @ 200 @ 12,重復字符= 6

我嘗試遍歷字符串

這是我的帶有字符串迭代的代碼,以找出字符串中重復的字符。

func countRepeatDigitsIn(keyword : String) -> Int
{
    // To keep track of processed symbols
    var uniqueCharacters = ""
    var repeatCharacterCount = 0

    for char in keyword.uppercased() {
        let alphabet = String(char)

        // If this is already counted, skip it
        if (uniqueCharacters.contains(alphabet))
        {
            repeatCharacterCount += 1
        }

        // Otherwise, add it to processed symbols
        uniqueCharacters += alphabet
    }

    return repeatCharacterCount
}

HelloWorld-重復字符為5(l重復3次,o重復2次

獲得該結果的最簡單方法是獲取直方圖,然后將所有非1的值相加。

例:

func histogram(_ s:String) -> [Character:Int] {
    var d = [Character:Int]()
    for c in s {
        d[c, default:0] += 1
    }
    return d
}
let reps = histogram("helloworld").values.filter{$0 > 1}.reduce(0, +) // 5
let reps2 = histogram("smart2000").values.filter{$0 > 1}.reduce(0, +) // 3
let reps3 = histogram("Smart@200@12").values.filter{$0 > 1}.reduce(0, +) // 6

這是一個有趣的減少和過濾字符串字符的鏈。

func countRepeatDigitsIn(keyword : String) -> Int {
    let total = Array(keyword.uppercased()).reduce(into: [Character : Int]()) { $0[$1, default: 0] += 1 }.filter { $0.value > 1 }.reduce(0) { $0 + $1.value }

    return total
}

for text in ["HelloWorld", "Smart2000", "Smart@200@12"] {
    print(text, countRepeatDigitsIn(keyword: text))
}

第一個reduce構造一個字典,其中的鍵是字符,而值是字符的計數。 然后,過濾器將刪除僅找到一次的字符。 第二次減少將增加剩余的計數。

使用Dictionary(grouping:by :)將字典中的相同字符分組,並添加計數大於1的值的計數

extension String {
    func repeatCount() -> Int {
        return Dictionary(grouping: lowercased()) { $0 }.values.filter { $0.count > 1 }.reduce(0) { $0 + $1.count }
    }
}
print("HelloWorLd".repeatCount())//5
print("Smart2000".repeatCount())//3
print("Smart@200@12".repeatCount())//6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM