Проблема в том, что
line.LastIndexOf("-") + 1
вернет число (указывающее место в line
, где он нашел последний -
символ плюс один).
Но функция replace ожидает, что вы сообщите ей, какую строку вы хотите заменить. Вы хотите заменить F
, а не число. (Ваш текущий код будет преобразован в sb.Replace(4, "#")
, который явно не найдет 4
s для замены.)
И если вы сделаете sb.Replace
, он заменит его для всех версий строка, которую вы ранее добавили в stringbuilder. Следовательно, было бы более разумно заменить его в line
, а затем добавить измененную версию line
в построитель строк.
sb.AppendLine(line.Replace("F", "#"))
Демонстрация в реальном времени: https://dotnetfiddle.net/5BZAUg
Редактировать:
Если вам нужно заменить любой символ, следующий за -
, а не F
, вы можете сделать это, найдя индекс символа в line
и затем удаляет символ с этим индексом и заменяет его другим, например,
Dim index = line.LastIndexOf("-") + 1
sb.AppendLine(line.Remove(index, 1).Insert(index, "#"))
Демо: https://dotnetfiddle.net/RTbiUG