2016-08-03 12 views
1
StringBuilder builder = new StringBuilder(); 
builder.Append(" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)"); 
for(int i=0;i<builder.Length;i++) 
{ 
    if(data[i] == "\" && data[i-1] == "\") 
     data[i] += " "; 
} 

Если в строке есть два обратных косая черта. Мне нужно добавить пространство между ними. В приведенном выше коде я получаю сообщение об ошибке «представляет собой символ как единица кода utf-16» при условии if. Потому что, используя это, я создаю PDF-файл. Заранее спасибо.представляет собой символ как код устройства utf-16

+0

Ваш код даже не компилируется. '\' означает escape sequnce и '\" 'на самом деле способ избежать двойных кавычек. Поскольку синтаксическая раскраска в самом вопросе показывает,' '\ '&& data [i-1] ==" 'является исполнительным одиночным строка –

ответ

1

Сообщение, которое вы получаете при наведении мыши на эту часть кода: "\" в этой строке:

if (data[i] == "\" && data[i-1] == "\") 

на самом деле не является ошибкой, но комментарий/описание класса String.

Обратная обратная косая черта используется для обозначения escape sequence. В документации указывается:

Комбинации символов, состоящие из обратного слэша (\), сопровождаемого буквой или комбинацией цифр, называются «escape-последовательностями». Чтобы представить символ новой строки, одинарный кавычек или некоторые другие символы в символьной константе, вы должны использовать escape-последовательности. Управляющая последовательность рассматривается как один символ и поэтому является действительной в качестве символьной константы.

Путаница возникает, потому что компилятор считает, что вы хотите иметь " как символ в строке при использовании \". Вот почему intellisense по-прежнему отмечает остальную часть линии в цвете string до момента, когда он находит " без обратной косой черты перед ним.

Вы можете использовать оператор @, чтобы заставить строку, которая будет интерпретироваться, как это, так что обратная косая черта будет просто персонаж:

if (data[i] == @"\" && data[i-1] == @"\") 

и ваш код становится компилируется.

К сожалению, ваша петля будет разбиваться на первую итерацию, когда i равно 0. Поскольку data не будет индексироваться с -1. Я бы предложил другой подход, если ваша задача - разместить пробел между двумя последовательными обратными косыми чертами.

Вы можете использовать просто Replace метод как это:

string s = @"\(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)"; 

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

Я не совсем понимаю, какую роль играет data массив в вашем коде, но вы также можете сделать это с StringBuilder

StringBuilder builder = new StringBuilder(); 
builder.Append(@" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)"); 

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

 Смежные вопросы

  • Нет связанных вопросов^_^