как стоит изменить код, чтобы он мог понимать, где идёт более 2 слэшей подряд?
private static void ParseComplexField(string line, StringBuilder tokenBuilder, ref int nextSymbol, char typeOfQuotes)
{
for (; nextSymbol < line.Length; nextSymbol++)
{
if (line[nextSymbol] == '\\')
{
if (line[nextSymbol - 1] == '\\')
tokenBuilder.Append('\\');
}
else if (line[nextSymbol] == typeOfQuotes)
{
if (line[nextSymbol - 1] == '\\' && line[nextSymbol - 2] != '\\')
tokenBuilder.Append(typeOfQuotes);
else
break;
}
else
tokenBuilder.Append(line[nextSymbol]);
}
}
Для обработки экранирования вместо заглядывания назад (по которому сложно что-то определить наверняка) можно запоминать факт того, что следующий символ должен быть экранирован (то есть что следующий символ нужно сразу добавить в результат).
Решается это с помощью флага, значение которого устанавливается в true при нахождении символа экранирования (слэша):
private static void ParseComplexField(string line, StringBuilder tokenBuilder, ref int nextSymbol, char typeOfQuotes)
{
var handleCharAsIs = false;
for (; nextSymbol < line.Length; nextSymbol++)
{
if (handleCharAsIs)
{
tokenBuilder.Append(line[nextSymbol]);
handleCharAsIs = false;
}
else if (line[nextSymbol] == '\\')
{
handleCharAsIs = true;
}
else if (line[nextSymbol] == typeOfQuotes)
{
//не знаю зачем это - видимо, для общей задачи
break;
}
else
{
tokenBuilder.Append(line[nextSymbol]);
}
}
}
Результаты:
\\\\\\\\ -> \\\\
abc -> abc
\\\abc\\ -> \abc\
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Внимание! Это перевод вопроса Console App (Net Standard) not listed
Начинаю вникать в xamarinРешил написать простенький проект а-ля заметочника
узнать на php c какой формы ее класс пришел ajax запрос? ели с классом class_1 оправить 1 собщение, если class_2 - второе