Голосование за лучший ответ
Голова Робота
Просветленный
(36360)
5 лет назад
Отладчик не помогает? Нельзя написать пример из нескольких строк, который больше ничего не делает кроме вызова StringBuilder.Append?
Скорее всего, проблема не в StringBuilder, а в алгоритме.
Например: входит ["abc"], а выходит [], вопрос, почему?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
namespace TableParser
{
[TestFixture]
public class QuotedFieldTaskTests
{
[TestCase("''", 0, "", 2)]
[TestCase("'a'", 0, "a", 3)]
public void Test(string line, int startIndex, string expectedValue, int expectedLength)
{
var actualToken = QuotedFieldTask.ReadQuotedField(line, startIndex);
Assert.AreEqual(actualToken, new Token(expectedValue, startIndex, expectedLength));
}
}
class QuotedFieldTask
{
public static Token ReadQuotedField(string line, int startIndex)
{
int borderCount = 0;
for (int i = startIndex; i < line.Length; i++)
{
if (i != 0)
{
if (((line[i] == '\"') || (line[i] == '\'')) && (line[i - 1] != '\\'))
borderCount++;
}
else if ((line[i] == '\"') || (line[i] == '\''))
borderCount++;
}
var builder = new StringBuilder();
if (borderCount % 2 == 1)
borderCount++;
for (int i = startIndex; borderCount != 0 && i < line.Length;)
{
if (i != 0)
{
if (((line[i] == '\"') || (line[i] == '\'')) && (line[i - 1] != '\\'))
borderCount -= 1;
}
else if ((line[i] == '\"') || (line[i] == '\''))
{
borderCount -= 1;
}
else
builder.Append(line[i]);
}
line = builder.ToString();
return new Token(line, startIndex, line.Length - startIndex);
}
}
}