Я использую Visual Basic 2010

Я пытаюсь найти конкретный повторяющийся номер в строке и заменить его другим числом, но сохранить один из дубликатов в строке. Например: строка 24828, и мне нужно, чтобы новая строка была 24628, в которой одна из 8, а другая 8 заменена на 6. В моем коде она заменяет и 8, и результат равно 24626. Он заменяет обе восьмерки на шестерки. Кто-нибудь может помочь? Примечание. В этом примере есть два повторяющихся числа, но конкретный дубликат, который мне нужен, - это 8, а не 2. Кроме того, не имеет значения, какой номер 8 заменить или оставить. Спасибо! Обновление этого сообщения ... Строка из 5 цифр не всегда будет 24828. Я использую эту строку в качестве примера. Может быть даже строка, в которой вообще нет восьмерок. Мне нужно проверить любую строку, в которой больше одной 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
0
Darryl 3 Сен 2016 в 16:15

3 ответа

Лучший ответ

Я думаю, это прекрасно работает:

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.

0
Enigmativity 4 Сен 2016 в 01:40
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 }
0
Slai 4 Сен 2016 в 00:58
Dim OldText As String = "24828"
Dim NewText As String = OldText.Replace("4828","4628")
0
Rob 3 Сен 2016 в 23:06