2017-01-26 3 views
-4

В строке будет что-то вроде этого:C# Удалить символы из строки между/**/

for(I=1;I<10;I++) /*Else*/ {A = "for"; B = 'c'; break;} // while(a < 10) 

Я хотел бы удалить из этой строки все, что находится между /**/ и между "" и между '' и что-нибудь после того, как //

Вот пример

вход:

for(I=1;I<10;I++) /*Else*/ {A = "for"; B = 'c'; break;} // while(a < 10) 

выход:

FOR(i=1;i<10;i++) /**/ {a = ""; b = ''; BREAK;} // 

Я знаю, что я должен пройти через символы в строке с:

for (int i = 0; i < input.Length; i++) 
{ 
    // search for /**/ ? 
} 

, но я не знаю, как я должен удалить символы и поставить другие символы в новый строка.

string sentence = "for(I=1;I<10;I++) /*Else*/ {A = "for"; B = 'c'; break;} // while(a < 10)"; 
     //how can I remove these characters from string so it will look something like this? 
string shortSentence = "FOR(i=1;i<10;i++) /**/ {a = ""; b = ''; BREAK;} //"; 
+0

что конкретно вы пытаетесь сделать ..? Этот вопрос не имеет смысла в текущем состоянии – MethodMan

+0

Если вы не знаете, что это не нужно давать - :) – Damjan25

+0

Я пытаюсь удалить все, что находится между комментариями и цитатами – Damjan25

ответ

0

Попробуйте это. Идея состоит в том, чтобы сначала удалить материал в конце, // комментарии. Затем после этого мы ищем/* и следующий /, удалим этот текст (мы остаемся с /**/, сохраним индекс этой строки и удалим его. После того, как у нас больше нет строк/, мы вставляем /**/ в позиции мы удалили их из

. Примечание: Это не будет работать, если у вас есть что-то вроде этого /* comment /* more comment */ and some other part */ Но это также не является допустимым комментарий в C#, который является языком вы помечено здесь

static string s = "for(int i = 0; i < 10; i++){ var myVar = \"Test\"; /*commented out code*/ Console.WriteLine(\"stuff\"); /* more comments here*/}//my comments here \n var myOverVar = /*more stuff removed*/ true; //some more comments"; 


static void Main(string[] args) 
{ 
    //s.IndexOf() 
    var result = new List<string>(); 
    var lines = s.Split(new[] {"\n"}, StringSplitOptions.RemoveEmptyEntries); //use this if you have multiple code lines, separated by new lines. 
    foreach (var line in lines) 
    { 
     var listOfPositions = new List<int>(); 
     var l = line; 
     //chop off everything after comments 
     var indexOfLineComment = l.IndexOf("//"); 

     l = l.Remove(indexOfLineComment + 2); // 2 because // is two characters long 
       var openBraceIndex = l.IndexOf("/*"); 
     while (openBraceIndex != -1) //-1 indicates that we didn't find /* 
     { 
      var closingBraceIndex = l.IndexOf("*/"); 
      if (closingBraceIndex == -1) 
      { 
       break; //you didn't specify how to the case when an error in syntax was made, but handle it here 
      } 
      l = l.Remove(openBraceIndex + 2, closingBraceIndex - openBraceIndex-2); 
      var ind = l.IndexOf("/**/"); 
      listOfPositions.Insert(0, ind); 
      l = l.Remove(ind, 4); 
      openBraceIndex = l.IndexOf("/*"); 

     } 
     foreach (var i in listOfPositions) 
      if (l.Length <= i) 
       l = l + "/**/"; 
      else 
       l = l.Insert(i, "/**/"); 
     result.Add(l); 
    } 

} 
..
+0

Ваш код очень сложный и сложный в обслуживании. Я хотел бы предложить вам разбить его на несколько методов (I я работаю над этим прямо сейчас) –

+0

Но я не здесь, чтобы закодировать OP. Я предложил решение их проблемы как алгоритм. Это зависит от них, чтобы реализовать его правильно, и если у них есть проблемы с этим, вернитесь и спросите здесь. – Kolichikov

+0

Взгляните на мой ответ для более простого и удобного кода. –

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