Заменить " " на " " в строке в C#

Я все еще не понимаю, как это сделать. Я видел много сообщений об этом, но ни одно из решений не сработало для меня.

У меня есть строка под названием "A\b". Результат, который мне нужен, - "ab". Как это делается?

У меня есть текстовый файл, в котором есть строка подключения к базе данных, указывающая на экземпляр с именем-ServerDbInstance

моя цель-сделать замену строки в текстовом файле -- заменить "ServerDbInstance" другим значением, скажем " 10.11.12.13, 1200".

Итак, у меня есть:

stringToBeReplaced = @"ServerDbInstance";
newString = @"10.11.12.13, 1200";

здесь начинается проблема. Мой stringToBeReplaced всегда будет "Server DbInstance", и когда я ищу эту строку в своем текстовом файле, поиск завершается неудачей, поскольку текстовый файл не имеет строки" Server\DbInstance"; вместо этого он имеет только"ServerDbInstance". Итак, как изменить "Server\DbInstance" на "ServerDbInstance"?

7 ответов


Я подозреваю, что ваша строка уже на самом деле содержит только одну обратную косую черту, но вы смотрите на нее в отладчике, который экранирует ее для вас в форму, которая будет действительна как обычный строковый литерал в C#.

если распечатать его в консоли или в окне сообщения, отображается ли он с двумя обратными косыми чертами или одним?

Если вы на самом деле хотите заменить двойную обратную косую черту на одну, это легко сделать Итак:

text = text.Replace(@"\", @"\");

... но я предполагаю, что оригинал все равно не содержит двойной обратной косой черты. Если это не поможет, пожалуйста, дайте более подробную информацию.

EDIT: в ответ на отредактированный вопрос, ваш stringToBeReplaced имеет только одну обратную косую черту. Действительно. Где бы вы ни видели две обратные косые черты, этот зритель избегает их. Сама строка не имеет двух обратных косых черт. Осмотрите stringToBeReplaced.Length и подсчет символов.


Я пробовал процедуры ваших сообщений, но без успеха.

это то, что я получаю от отладчика: enter image description here

исходная строка, которую я сохраняю в базе данных sqlite, была b\r\na .. когда я их читаю, я получаю b\r\na (длина в отладчике 6:"b" "\" "\r" "\" "\n" "a") затем я пытаюсь заменить эту строку, и я снова получаю строку с длиной 6 (Вы можете видеть на рисунке выше).

я запускаю этот короткий скрипт в своей тестовой форме только с одним текстовым полем:

private void Form_Load(object sender, EventArgs e)
    {
        string x = "b\r\na";
        string y = x.Replace(@"\", @"\");
        this.textBox.Text = y + "\r\n\r\nLength: " + y.Length.ToString();
    }

и я получите это в текстовом поле (таким образом, нет новых символов строки между "b" и "a":

b\r\na

Length: 6

что я могу сделать с этой строкой, чтобы отменить обратную косую черту? (Я ожидаю новой линии между "b"и " a".)

устранение:

OK, это невозможно сделать со стандартной заменой, из-за \r и \n один персонаж. Можно заменить часть строкового символа символом, но невозможно заменить "половину части" одного символа. Так что я должен ... замените любой специальный символ отдельно, например:

private void Form_Load(object sender, EventArgs e) {
    ...
    string z = x.Replace(@"\r\n", Environment.NewLine);
    ...

это дает правильный результат для меня:

b
a

в случае, если кто-то застрял с этим, и ни один из ответов выше не работал, ниже то, что сработало для меня. Надеюсь, это поможет.

var oldString = "\r|\n";

// None of these worked for me
// var newString = oldString(@"\", @"\");
// var newString = oldString.Replace("\\", "\");
// var newString = oldString.Replace("\u5b89", "\u5b89");
// var newString = Regex.Replace(oldString , @"\", @"\");

// This is what worked
var newString = Regex.Unescape(oldString);
// newString is now "\r|\n"

попробуй

var newstring = @"a\b".Replace(@"\",@"\");

string a = @"a\b";
a = a.Replace(@"\",@"\");

должны работать. Помните, что в watch Visual STudio показать "\" сбежал, так что вы видите "\" вместо одного.


вы можете просто сделать замену в строке как

Str.Replace(@"\",@"\");

у меня была та же проблема, пока я не прочитал ответ Джона Скита об отладчике, отображающем одну обратную косую черту с двойной обратной косой чертой, даже если строка может иметь одну обратную косую черту. Я этого не знал. Поэтому я изменил свой код с

text2 = text1.Replace(@"\", @"/");

to

text2 = text1.Replace(@"\", @"/");

и это решило проблему. Примечание: я взаимодействую и R.Net который использует одиночные косые черты в строках пути.