如何查找和替换字符串中的重复数字并保留其中一个重复数字?

How do I find and replace a duplicate number in a string and keep one of the duplicate numbers?

我正在使用 Visual Basic 2010

我试图在字符串中找到特定的重复数字并将其替换为另一个数字,但保留字符串中的重复数字之一。例如:字符串是 24828,我需要新字符串是 24628,它保留 8 中的一个,而另一个 8 被 6 替换。在我的代码中,我用它替换了 8 和结果是 24626。它正在用 6 替换两个 8。谁能帮忙?注意:此示例中有两个重复数字,但我需要的特定重复数字是 8 而不是 2。此外,替换或保留哪个 8 并不重要。谢谢!更新到此 post... 5 位数字字符串不会总是 24828。我以这个字符串为例。甚至可能有一个根本没有任何 8 的字符串。我需要检查任何超过一个 8 的字符串。如果它有一个 8,则字符串不需要更改。

Dim strText As String = "24828"
Dim newStrText As String = ""
Dim nIndex = strText.IndexOf("8")
If nIndex > -1 Then
    MessageBox.Show("Found 8")
    newStrText = strText.Replace("8", "6")
    MessageBox.Show(newStrText)
Else
    MessageBox.Show("There is no 8")
End If
Dim OldText As String = "24828"
Dim NewText As String = OldText.Replace("4828","4628")
Dim s = "24828"
Dim i = s.IndexOf("8")
If i >= 0 Then
    Mid(s, i + 1, 1) = "6"        ' "24628"
End If

Dim s = "24828"
Dim s2 = Join(Split(s, "8", 2), "6")  ' "24628"

实际上,Replace方法有一个Count参数来限制替换次数:

Dim s = "24828"
Dim s3 = Replace(s, "8", "6",  , 1)   ' "24628"

更新

我没有读完整个问题。计算 8 的数量:

Dim s = "24828"
Dim count = Split(s, "8").Length - 1      ' 2

查找字符串中的所有重复字符:

Dim s = "24828"
Dim dupliates = (From d In s Group By d Into g = Group Where g.Count > 1 Select d).ToArray  ' { "2"c, "8"c }

或者查找重复字符的索引:

Dim s = "24828"
Dim dupliateIndexes = Enumerable.Range(0, Len(s)).GroupBy(Function(i) s(i)).SelectMany(Function(g) g.Skip(1)).ToArray  ' { 3, 4 }

我认为这很好用:

Dim text = "24828"

Dim split = text.Split("8"c)
Dim result = If(split.Length > 1, _
    String.Join("6", split.Take(split.Length - 1)) + "8" + split.Last(), _
    text)

我得到 24628