Escape двойные кавычки в строке
Двойные кавычки могут быть экранированы следующим образом:
string test = @"He said to me, ""Hello World"". How are you?";
Но это связано с добавлением символа "
в строку. Есть ли функция С# или другой метод, чтобы избежать двойных кавычек, чтобы не требовалось изменять строку?
Ответы
Ответ 1
Нет.
Используйте либо стенографические строковые литералы, либо у вас есть "
, используя обратную косую черту.
string test = "He said to me, \"Hello World\" . How are you?";
Строка не изменилась ни в одном случае - в ней есть один escaped "
. Это всего лишь способ сказать С#, что символ является частью строки, а не терминатором строк.
Ответ 2
Вы можете использовать обратную косую черту в любом случае;
string str = "He said to me, \"Hello World\". How are you?";
Он печатает;
He said to me, "Hello World". How are you?
который является точно такой же печатью с:
string str = @"He said to me, ""Hello World"". How are you?";
Вот DEMO
.
"
все еще является частью вашей строки.
Отъезд Escape Sequences
и String literals
из MSDN.
Ответ 3
В С# вы можете использовать обратную косую черту, чтобы помещать специальные символы в вашу строку.
Например, чтобы поставить ", вам нужно написать".
Есть много символов, которые вы пишете, используя обратную косую черту:
Обратная косая черта с числом:
- \000 null
- \010 backspace
- \011 горизонтальная вкладка
- \012 новая строка
- \015 возврат каретки
- \032 заменить
- \042 двойная кавычка
- \047 одиночная кавычка
- \134 обратная косая черта
- \140 серьезный акцент
Обратная косая черта с символом
- \a Bell (предупреждение)
- \b Backspace
- \f Formfeed
- \n Новая строка
- \r Возврат каретки
- \t Горизонтальная вкладка
- \v Вертикальная вкладка
- \'Одиночная кавычка
- \"Двойная кавычка
- \Backslash
- \? Литеральный знак вопроса
- \ooo Символ ASCII в восьмеричной нотации
- \x hh Символ ASCII в шестнадцатеричной нотации
- \x hhhh Символ Юникода в шестнадцатеричной нотации, если эта escape-последовательность используется в широкосимвольной константе или в строковом литерале Unicode. Например, WCHAR f = L '\ x4e00' или WCHAR b [] = L "Китайский символ для одного -\x4e00".
Ответ 4
Вы ошибаетесь, убегая.
Дополнительные символы "
являются частью строкового литерала; они интерпретируются компилятором как одиночный "
.
Фактическое значение вашей строки все равно He said to me , "Hello World".How are you ?
, как вы увидите, распечатываете ли вы его во время выполнения.
Ответ 5
Пожалуйста, объясните вашу проблему. Вы говорите:
Но это включает добавление символа в строку.
Какая проблема? Вы не можете набрать string foo = "Foo"bar"";
, потому что это вызовет ошибку компиляции. Что касается добавления, то в строковых размерах это не так:
@"""".Length == "\"".Length == 1