Подтвердить что ты не робот

Замените "\\" на "\" в строке в С#

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

У меня есть строка под названием "a\\b". В результате мне нужен "a\b". Как это делается?

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

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

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

stringToBeReplaced = @"Server\DbInstance";
newString = @"10.11.12.13, 1200";

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

Что мне делать с этой строкой для unescape backslash? (Я ожидаю новую строку между "b" и "a".)

Решение:

ОК, это невозможно сделать со стандартной заменой, поскольку \r и \n - один символ. Возможно заменить часть символа строки символом, но невозможно заменить "половину" одного символа. Итак, я должен заменить специальный символ отдельно, например:

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

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

b
a

Ответ 3

Попробуйте -

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

Ответ 4

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

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

Ответ 5

Вы можете просто выполнить замену в своей строке, например

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

Ответ 6

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

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

к

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

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

Ответ 7

Я не уверен, как вы написали свой код, но это должно быть что-то вроде этого

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