Мне нужно сделать функцию, которая удаляет все комментарии из текста (кода). Мой код почти закончен, но он не работает, если комментарий начинается в первой строке файла. Он говорит, что индекс выходит за границы, я попытался изменить циклы for
, чтобы начать с 1, а затем if
на (text[i] == '/' && text[i - 1] == '/')
, но это не работает.
Любое предложение, как я могу это исправить или улучшить свой код, потому что он выглядит странно.
public void RemoveComments(string text)
{
for (int i = 0; i < text.Length; i++)
{
if (text[i] == '/' && text[i + 1] == '/')
{
text = text.Remove(i, 2);
for (int j = i; j < text.Length; j++)
{
if (text[j] != '\n')
{
text = text.Remove(j, 1);
j--;
}
else if (text[j] == '\n')
{
text = text.Remove(j, 1);
j--;
while (text[j] == ' ')
{
text = text.Remove(j, 1);
j--;
}
i = j;
break;
}
}
}
else if (text[i] == '/' && text[i + 1] == '*')
{
text = text.Remove(i, 2);
for (int j = i; j < text.Length; j++)
{
if (text[j] != '*' && text[j + 1] != '/')
{
text = text.Remove(j, 1);
j--;
}
else if (text[j] == '*' && text[j + 1] == '/')
{
text = text.Remove(j, 2);
j = j - 2;
while (text[j] == ' ')
{
text = text.Remove(j, 1);
j--;
if (text[j] == '\n')
{
text = text.Remove(j, 1);
j--;
}
}
i = j;
break;
}
}
}
}
Console.WriteLine(text);
}
РЕДАКТИРОВАТЬ: Теперь я провел много экспериментов, и я обнаружил, что проблема с (в // цикле) мне нужно этот цикл, чтобы исправить некоторые небольшие проблемы aligment:
while (text[j] == ' ')
{
text = text.Remove(j, 1);
j--;
}
Файл Test.txt.
//int a;
int c; //int d;
Console.Write/*Line*/("Hhehehe");
if(1>0)
/*ConsoleWriteLine("Yes")*/
//Nooo